create type emp_obj AS object
(
empno NUMBER (4)
,ename VARCHAR2(10)
,sal number(7,2)
,job varchar2(9)
);
CREATE TYPE EMP_NT AS TABLE OF emp_OBJ;
create or replace package test_pkg
IS
TYPE abc_cur is REF CURSOR;
procedure test_proc
(
p_rec IN OUT abc_cur
);
END test_pkg;
/
create or replace package body test_pkg
IS
procedure test_proc
(
p_rec IN OUT abc_cur
)
IS
v_emp_nt emp_nt;
BEGIN
SELECT emp_obj(empno,ename,sal,job) BULK COLLECT INTO v_emp_nt FROM EMP;
FOR i in v_emp_nt.first..v_emp_nt.last
LOOP
IF v_emp_nt(i).job='CLERK' THEN
v_emp_nt(i).sal := v_emp_nt(i).sal +200;
ELSIF v_emp_nt(i).job='MANAGER' THEN
v_emp_nt(i).sal := v_emp_nt(i).sal +800;
END IF;
END LOOP;
open p_rec for select * from table(v_emp_nt);
END test_proc;
END test_pkg;
/
正如你所看到的代码,我做什么,是为了得到想要的结果nested table(你的光标做),并以此为基础进行的最终记录了一些操作,如以及更新嵌套表。
最后,我将从这个updated nested table创建一个光标,并在打开后返回光标。
现在你的问题:How can you return append cursor?
它是简单create two nested table ,do some manipulation on both the nested table
假设你有v_emp_nt1为first nested table,你做一些操作上。 你有另一v_emp_nt2作为second nested table,你做了一些操作。
现在你cursor会像
open p_rec FOR (select * from v_emp_nt1 union select * from v_empnt2);
用这种方式,你可以达到你想要的输出。
**注:**上面的代码是一个嵌套表,您需要创建另一个嵌套表为您的代码,以便获得完整