【问题标题】:Assignment of one cursor to other cursor and looping through for loop将一个光标分配给另一个光标并循环遍历 for 循环
【发布时间】: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。为此,您不能将光标分配给另一个光标。请描述您正在尝试解决的问题,而不是您认为如何解决它。

标签: oracle plsql plsqldeveloper


【解决方案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。在包正文中,我想根据条件将光标分配给其他光标。
  • 据我所知,你不能。
猜你喜欢
  • 2012-01-20
  • 1970-01-01
  • 2013-08-18
  • 2021-11-25
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2013-03-29
相关资源
最近更新 更多