从oracle SP获取结果[光标]
我正在尝试从返回游标的oracle SP获取结果。 我有以下代码,似乎不工作从oracle SP获取结果[光标],oracle,Oracle,我正在尝试从返回游标的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,:cs
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;
我环顾四周,寻找这类问题,我是否得到了上面的代码
在同一个答案中,还有第二个循环选项。但这对我不起作用,因为代码中有一行写着:
rej_rec Reasons_for_Rejection%ROWTYPE;
拒绝的原因\u
应该是表名…但是在我的SP中,他们使用一些内部表,因为查询如下:
select c.blah from (select blah1 from blah) c
你应该说一些比“似乎不起作用”更具体的话。但是我发现您的示例的第一个错误是您混淆了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声明并不意味着必须直接从给定的表填充记录,只意味着记录的字段及其类型与表中某一行的字段及其类型相匹配。这些字段可以像任何其他变量一样被引用和分配。如果您使用的是SQL*Plus,则不需要声明 因为你没有给我们任何细节,所以很难知道你的代码为什么不工作。但这是你应该做的事情:
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>