我正在尝试从正在返回游标的oracle SP获取结果。 我有以下代码似乎不起作用......
declare VARIABLE csr1 REFCURSOR;
declare VARIABLE csr2 REFCURSOR;
declare VARIABLE csr3 REFCURSOR;
declare VARIABLE csr4 REFCURSOR;
declare VARIABLE csr5 REFCURSOR;
EXEC getReportData('PUB',:csr1,:csr2,:csr3,:csr4,:csr5);
PRINT csr1;
我环顾四周寻找这类问题,that在那里我得到了上面的代码。
在同一个答案中,还有第二个循环选项。但这对我不起作用,因为该代码中的一行代表说:
rej_rec Reasons_for_Rejection%ROWTYPE;
Reasons_for_Rejection
应该是表名...但是在我的SP中他们使用的是一些内部表,因为查询是这样的:
select c.blah from (select blah1 from blah) c
答案 0 :(得分:2)
你应该说一些比“似乎不起作用”更具体的东西。但是我对你的样本看到的第一件事就是你混淆了SQLPlus和PL / SQL。
我假设您在SQLPlus中键入命令或将其作为脚本运行。
“DECLARE”开始一个PL / SQL块,直到在新行上输入正斜杠才会执行。因此,如果您以交互方式键入这些命令,则可能只是提示您输入更多内容:
SQL> declare VARIABLE csr1 REFCURSOR;
2 declare VARIABLE csr2 REFCURSOR;
3 declare VARIABLE csr3 REFCURSOR;
4 declare VARIABLE csr4 REFCURSOR;
5 declare VARIABLE csr5 REFCURSOR;
6 EXEC getReportData('PUB',:csr1,:csr2,:csr3,:csr4,:csr5);
7 PRINT csr1;
8 /
SP2-0552: Bind variable "CSR5" not declared.
SQL>
您尝试使用的其他命令是SQLPlus命令。 VARIABLE命令在SQLPlus中声明一个绑定变量 - 它根本不涉及DECLARE关键字。所以你应该试试这个:
VARIABLE csr1 REFCURSOR;
VARIABLE csr2 REFCURSOR;
VARIABLE csr3 REFCURSOR;
VARIABLE csr4 REFCURSOR;
VARIABLE csr5 REFCURSOR;
EXEC getReportData('PUB',:csr1,:csr2,:csr3,:csr4,:csr5);
PRINT csr1;
我真的不明白你问题的其余部分。 %ROWTYPE声明并不意味着必须直接从给定表填充记录,只是其字段及其类型与表中的行匹配。这些字段可以像任何其他变量一样被引用和分配。
答案 1 :(得分:0)
如果您使用的是SQL * Plus,则不需要DECLARE。
由于您未向我们提供任何详细信息,因此很难知道您的代码无效的原因。但这是你应该做的事情:
SQL> create or replace procedure getReportData
2 (dno in dept.deptno%type
3 , d_recs out sys_refcursor
4 , e_recs out sys_refcursor)
5 is
6 begin
7 open d_recs for
8 select * from dept where deptno = dno;
9 open e_recs for
10 select * from emp where deptno = dno;
11 end;
12 /
Procedure created.
SQL> var rc1 refcursor
SQL> var rc2 refcursor
SQL>
SQL> exec getReportData (30, :rc1, :rc2)
PL/SQL procedure successfully completed.
SQL>
SQL> print rc1
DEPTNO DNAME LOC
---------- -------------- -------------
30 SALES CHICAGO
SQL> print rc2
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- --------- ---------- ----------
DEPTNO
----------
7499 VAN WIJK SALESMAN 7698 20-FEB-81 1600 300
30
7521 PADFIELD SALESMAN 7698 22-FEB-81 1250 500
30
7654 BILLINGTON SALESMAN 7698 28-SEP-81 1250 1400
30
7698 SPENCER MANAGER 7839 01-MAY-81 2850
30
7900 HALL CLERK 7698 03-DEC-81 950
30
SQL>