将一个光标分配给另一个光标并循环遍历 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 循环的主要内容,如果未能解决你的问题,请参考以下文章

将一个数组中的值分配给另一个数组而不循环

Oracle 中的光标与 FOR 循环

如何一次循环遍历 2 个数组并将数组中的颜色分配给另一个数组的每个值

如何使用光标和循环显示来自 sqlite 的片段的 recyclerview

是否可以将一个功能“分配”给另一个功能?

具有相同参考光标的多个循环