sql - 是否允许在 Oracle 中编写 SQL 函数以返回多个数据类型?
问题描述
我想了解 Oracle 中的 SQL 函数,我想知道是否可以编写一个 SQL 函数,它可以根据程序中的条件返回 Number 或 Varchar2。
解决方案
您可以使用 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;
推荐阅读
- objective-c - 如何在objective-c中对字符和下一个字符进行操作
- c++ - 带有 lambda 比较器的集合对的向量
- java - Asc/Desc 排序顺序作为带有 SQL Server 的 Spring Boot 和 Hibernate 应用程序中的本机查询中的参数
- android - 场景透明材质
- c++ - 如何在相机位置居中定向光深度图?
- swift - KVO 的 Swift 适配可以处理自定义目标吗?
- python - 如何在 2020 年修复 Python/Windows 的 DLIB?
- python - Beautifulsoup,找到htm中唯一没有属性的标签
- python - 在 python 中单击按钮使用 Selenium 没有 Id 或使用 XPath
- automated-tests - ClientFunction: _axios2 未定义