从一个oracle函数返回多个值



这是我的对象类型

Create or replace type demo_obj is object (
Flag number,
Message varchar2(200))

对象表

Create or replace type obj_table is table of demo_obj

接下来,在我编写的函数中,一个游标首先获取一些id接下来,我需要打开光标,检查每个我的状态和其他表是否包含成功或错误状态

如果光标是空的,我需要返回标志为0和消息为空的

如果所有的"我会";s是成功的o需要返回标志1,消息是由逗号分隔的所有ID的串联字符串

如果少数ID成功,少数ID错误,我需要返回标志2和消息作为错误的级联ID

这就是你应该做的。我不关心空光标错误的逻辑-你自己做。这个演示展示了如何从函数中返回合适的类型(我相信,这正是困扰您的问题(。

类型优先:

SQL> CREATE OR REPLACE TYPE demo_obj IS OBJECT
2  (
3     Flag NUMBER,
4     MESSAGE VARCHAR2 (200)
5  );
6  /
Type created.
SQL> CREATE OR REPLACE TYPE obj_table IS TABLE OF demo_obj;
2  /
Type created.

功能:

SQL> CREATE OR REPLACE FUNCTION f_test
2     RETURN obj_table
3  IS
4     l_flag  NUMBER;
5     l_msg   VARCHAR2 (200);
6     retval  obj_table := obj_table ();
7  BEGIN
8     l_flag := 1;
9
10     SELECT LISTAGG (deptno, ',') WITHIN GROUP (ORDER BY deptno)
11       INTO l_msg
12       FROM dept;
13
14     retval.EXTEND;
15     retval (1) := demo_obj (l_flag, l_msg);
16
17     RETURN retval;
18  END;
19  /
Function created.

测试:

SQL> SELECT * FROM TABLE (f_test);
FLAG MESSAGE
---------- --------------------
1 10,20,30,40
SQL>

最新更新