oracle 如何 更改 ref cursor 结果集,oracle – 如何从anther调用一个存储过程并修改返回的refcursor?...
不直接,沒有.
SYS_REFCURSOR是指向結果的指針 – 您唯一能做的就是獲取數據.您無法修改結果集.
P_PROC2可以從SYS_REFCURSOR獲取數據,發(fā)出查詢以從其他表中獲取其他數據,并將某些內容返回給調用者.那時,我傾向于傾向于將P_PROC2轉換為流水線表函數.但是您可以返回包含修改后數據的集合.
如果p_proc2絕對需要返回REF CURSOR,則可以將p_proc1的REF CURSOR中的數據提取到全局臨時表中,然后在p_proc2中打開一個新的游標,該游標將查詢此全局臨時表并執(zhí)行您希望的任何其他操作.就像是
SQL> create global temporary table tmp_emp
2 as
3 select empno, ename, deptno from emp where 1=2;
Table created.
SQL> create or replace procedure p1( p_cur1 out sys_refcursor )
2 as
3 begin
4 open p_cur1 for select * from emp;
5 end;
6 /
Procedure created.
SQL> ed
Wrote file afiedt.buf
1 create or replace procedure p2( p_cur2 out sys_refcursor )
2 as
3 l_cur1 sys_refcursor;
4 l_rec emp%rowtype;
5 begin
6 p1( l_cur1 );
7 loop
8 fetch l_cur1 into l_rec;
9 exit when l_cur1%notfound;
10 insert into tmp_emp( empno, ename, deptno ) values( l_rec.empno, l_rec
ename, l_rec.deptno );
11 end loop;
12 open p_cur2 for
13 select empno, ename, dname
14 from tmp_emp,
15 dept
16 where dept.deptno = tmp_emp.deptno;
17* end;
SQL> /
Procedure created.
SQL> variable rc refcursor;
SQL> exec p2( :rc );
PL/SQL procedure successfully completed.
SQL> print rc
EMPNO ENAME DNAME
---------- ---------- --------------
7839 KING ACCOUNTING
7934 MILLER ACCOUNTING
7782 CLARK ACCOUNTING
7369 smith RESEARCH
7902 FORD RESEARCH
7876 ADAMS RESEARCH
7788 SCOTT RESEARCH
7566 JONES RESEARCH
7900 JAMES SALES
7499 ALLEN SALES
7698 BLAKE SALES
EMPNO ENAME DNAME
---------- ---------- --------------
7654 MARTIN SALES
7844 TURNER SALES
7521 WARD SALES
14 rows selected.
總結
以上是生活随笔為你收集整理的oracle 如何 更改 ref cursor 结果集,oracle – 如何从anther调用一个存储过程并修改返回的refcursor?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 反射.问题_Java知识点总结
- 下一篇: pandas to_csv参数详解_【P