将一个光标分配给另一个光标并循环遍历 for 循环
Posted
技术标签:
【中文标题】将一个光标分配给另一个光标并循环遍历 for 循环【英文标题】:Assignment of one cursor to other cursor and looping through for loop 【发布时间】:2021-03-18 16:43:22 【问题描述】:我在包规范中有一个光标,如下所示
Create package pkgname
is
Cursor C1(report_date date) is select * from some_table where some_date=report_date;
procedure proc(repdate date)
end;
我想要一个功能,将这个光标 C1 分配给同一包体的过程中的其他光标。
Create package body pkgname is
Procedure proc(repdate date)
Is
Cursor C2 is C1(repdate);
Begin
for j in C2 loop
--do some task;
end loop;
End;
End;
【问题讨论】:
欢迎来到 SO 社区。请花一些时间浏览Tour 并查看帮助部分How to Ask。为此,您不能将光标分配给另一个光标。请描述您正在尝试解决的问题,而不是您认为如何解决它。 【参考方案1】:你为什么要这样做?如果您在包规范中声明了光标,只需在包正文中使用它。例如:
SQL> create or replace package pkg_test as
2 cursor c1 (par_job varchar2) is
3 select empno, ename from emp
4 where job = par_job;
5 procedure proc (par_job in varchar2);
6 end;
7 /
Package created.
SQL> create or replace package body pkg_test as
2 procedure proc (par_job in varchar2) is
3 begin
4 for cur_r in pkg_test.c1(par_job) loop --> here it is!
5 dbms_output.put_line(cur_r.empno ||' '|| cur_r.ename);
6 end loop;
7 end;
8 end;
9 /
Package body created.
SQL> set serveroutput on
SQL> exec pkg_test.proc('CLERK');
7369 SMITH
7876 ADAMS
7900 JAMES
PL/SQL procedure successfully completed.
SQL>
【讨论】:
感谢您的回复。实际上我在包规范中有两个游标 C1、C2。在包正文中,我想根据条件将光标分配给其他光标。 据我所知,你不能。以上是关于将一个光标分配给另一个光标并循环遍历 for 循环的主要内容,如果未能解决你的问题,请参考以下文章
如何一次循环遍历 2 个数组并将数组中的颜色分配给另一个数组的每个值