当我尝试执行以下查询时:
declare
v_rc sys_refcursor;
wfrt_a1 varchar2(800 byte);
wfrt_a2 varchar2(800 byte);
wfrt_a3 varchar2(800 byte);
wfrt_a4 varchar2(800 byte);
wfrt_a5 varchar2(800 byte);
wfrt_a6 varchar2(800 byte);
wfrt_a7 varchar2(800 byte);
wfrt_a8 varchar2(800 byte);
wfrt_a9 varchar2(800 byte);
wfrt_a10 varchar2(800 byte);
wfrt_a11 varchar2(800 byte);
wfrt_a12 varchar2(800 byte);
wfrt_a13 varchar2(800 byte);
wfrt_a14 varchar2(800 byte);
wfrt_a15 varchar2(800 byte);
wfrt_a16 varchar2(800 byte);
wfrt_a17 varchar2(800 byte);
wfrt_a18 varchar2(800 byte);
wfrt_a19 varchar2(800 byte);
wfrt_a20 varchar2(800 byte);
wfrt_a21 varchar2(800 byte);
wfrt_a22 varchar2(800 byte);
wfrt_a23 varchar2(800 byte);
wfrt_a24 varchar2(800 byte);
wfrt_a25 varchar2(800 byte);
wfrt_a26 varchar2(800 byte);
wfrt_a27 varchar2(800 byte);
wfrt_a28 varchar2(800 byte);
wfrt_a29 varchar2(800 byte);
wfrt_a30 varchar2(800 byte);
wfrt_a31 varchar2(800 byte);
wfrt_a32 varchar2(800 byte);
wfrt_a33 varchar2(800 byte);
wfrt_a34 varchar2(800 byte);
wfrt_a35 varchar2(800 byte);
wfrt_a36 varchar2(800 byte);
wfrt_a37 varchar2(800 byte);
wfrt_a38 varchar2(800 byte);
wfrt_a39 varchar2(800 byte);
wfrt_a40 varchar2(800 byte);
wfrt_a41 varchar2(800 byte);
wfrt_a42 varchar2(800 byte);
begin
execute My_Procedure_Name (:v_rc ,'Investments Series','31-12-2012','Dealer Group','All Adv'); -- This returns an open cursor
loop
fetch v_rc into wfrt_a1, wfrt_a2, wfrt_a3, wfrt_a4,wfrt_a5,wfrt_a6,wfrt_a7,wfrt_a8,wfrt_a9,wfrt_a10,wfrt_a11,wfrt_a12,wfrt_a13,wfrt_a14,wfrt_a15,wfrt_a16,wfrt_a17
,wfrt_a18,wfrt_a19,wfrt_a20,wfrt_a21,wfrt_a22,wfrt_a23,wfrt_a24,wfrt_a25,wfrt_a26,wfrt_a27,wfrt_a28,wfrt_a29,wfrt_a30,wfrt_a31,wfrt_a32,wfrt_a33,wfrt_a34,wfrt_a35
,wfrt_a36,wfrt_a37,wfrt_a38,wfrt_a39,wfrt_a40,wfrt_a41,wfrt_a42;
exit when v_rc%NOTFOUND; -- Exit the loop when we've run out of data
dbms_output.put_line('Row: '||v_rc%ROWCOUNT||' # '||wfrt_a1||','||wfrt_a2||','||wfrt_a3||','||wfrt_a4||','||wfrt_a5||','||wfrt_a6||','||wfrt_a7||','||wfrt_a8||','||wfrt_a9
||','||wfrt_a10||','||wfrt_a11||','||wfrt_a12||','||wfrt_a13||','||wfrt_a14||','||wfrt_a15||','||wfrt_a16||','||wfrt_a17
||','||wfrt_a18||','||wfrt_a19||','||wfrt_a20||','||wfrt_a21||','||wfrt_a22||','||wfrt_a23||','||wfrt_a24||','||wfrt_a25
||','||wfrt_a26||','||wfrt_a27||','||wfrt_a28||','||wfrt_a29||','||wfrt_a30||','||wfrt_a31||','||wfrt_a32||','||wfrt_a33
||','||wfrt_a34||','||wfrt_a35||','||wfrt_a36||','||wfrt_a37||','||wfrt_a38||','||wfrt_a39||','||wfrt_a40||','||wfrt_a41||','||wfrt_a42);
end loop;
close v_rc;
end;
我收到以下错误: ORA-06550:第56行,第9栏: PLS-00103:遇到符号 期待下列之一时,“My_Procedure_Name” :=(@%;即时
注意:我的程序如下
CREATE OR REPLACE PROCEDURE USER.My_Procedure_Name (c1 IN OUT SYS_REFCURSOR,
code IN VARCHAR2,
date IN VARCHAR2,
group IN VARCHAR2,
adv IN VARCHAR2
)
请问,我做错了?感谢。
答案 0 :(得分:1)
您没有在PL / SQL中明确execute
过程调用,因此请删除该字:
begin
My_Procedure_Name (v_rc , 'Investments Series','31-12-2012',
'All Dealer Group','All Adviser'); -- This returns an open cursor
loop
在PL / SQL中,你有动态SQL的execute immediate
;错误消息是因为它在看到单词immediate
时会看到您的过程名称。您可能会将它与SQL * Plus和SQL Developer execute
命令混淆,后者是一个小型匿名块的简写。
当你真正想要本地声明的:v_rc
时,你传递v_rc
作为第一个参数,它表示一个绑定变量。如果它没有对此进行评论,那么你可能已经将其定义为客户端变量,如果你从中获得了“错误的数字或类型”错误,则可以使用不同的类型。
传递字符串而不是日期似乎有点奇怪。