首页 > 解决方案 > 是否允许在 Oracle 中编写 SQL 函数以返回多个数据类型?

问题描述

我想了解 Oracle 中的 SQL 函数,我想知道是否可以编写一个 SQL 函数,它可以根据程序中的条件返回 Number 或 Varchar2。

标签: sqloracledatabase-administration

解决方案


您可以使用 ANYDATA 的返回类型来排序。但是调用查询或 PL/SQL 块必须使用 CASE 语句来评估返回类型,以便对其进行任何处理。下面非常简单的演示。

    CREATE OR REPLACE FUNCTION AnyData_Test
      (
       p_Value_In            IN      VARCHAR2
      )
      RETURN AnyData
AS
      ad_Test_Var            ANYDATA;
BEGIN
      CASE
            WHEN p_Value_In = 'Varchar2' THEN ad_Test_Var := SYS.ANYDATA.ConvertVarchar2('VC2');
            WHEN p_Value_In = 'Number'   THEN ad_Test_Var := SYS.ANYDATA.ConvertNumber(123);
            ELSE                              ad_Test_Var := SYS.ANYDATA.ConvertDate(SYSDATE);
      END CASE;
      RETURN ad_Test_Var;
END AnyData_Test;
/

SELECT
      AnyData.GetTypeName(AnyData_Test('Varchar2'))    AS Return_Type_V
     ,AnyData.AccessVarchar2(AnyData_Test('Varchar2')) AS Return_Type_V_Value
     --
     ,AnyData.GetTypeName(AnyData_Test('Number'))      AS Return_Type_N
     ,AnyData.GetTypeName(AnyData_Test('Nope'))        AS Return_Type_D
FROM dual
;
      
SELECT
      CASE AnyData.GetTypeName(AnyData_Test('Varchar2'))
            WHEN 'SYS.VARCHAR2' THEN AnyData.AccessVarchar2(AnyData_Test('Varchar2'))
            ELSE 'Other'
      END AS Quick_Test
FROM dual;

推荐阅读