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;
2条答案
按热度按时间jhdbpxl91#
可以使用anydata的返回类型来实现这一点。但是调用查询或pl/sql块必须使用case语句来计算返回类型,以便对其执行任何操作。下面是非常简单的演示。
vltsax252#
oracle函数可以任意复杂,也可以任意应用逻辑。一个包含逻辑的函数的非常基本的例子
该函数只允许两个参数,一个作为varchar,另一个作为number
c2只能是a或b。其他值为错误
基于它的函数返回一个数,如果是a,则返回c1+10的和;如果是b,则返回+100的和。
让我们努力吧
更新
如果要返回任意数量的字符串,请使用return varchar2
然后,您也可以申请(12.2版以后的版本)
VALIDATE_CONVERSION
用于确定原始函数返回的是字符串还是数字的标准函数1表示真数字,0表示不是数字