oracle游标返回的行数,如何从多个游标中的Oracle存储过程返回多行?

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创建一个光标,并在打开后返回光标。

eziFw.jpg

现在你的问题: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);

用这种方式,你可以达到你想要的输出。

**注:**上面的代码是一个嵌套表,您需要创建另一个嵌套表为您的代码,以便获得完整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值