2016-09-23 60 views
0

我在Oracle中创建的过程如下如何在oracle中运行游标输出的程序?

create or replace procedure jobsfetch 
(id varchar2,jobcursor out sys_refcursor) 
as 
begin 
open jobcursor for 
    select * from shop.jobs where job_id = id; 
end; 

我在SQL运行程序* Plus中使用:

exec jobsfetch('AD_ASST'); 

但我发现了以下错误

ERROR at line 1: 
ORA-06550: line 1, column 7: 
PLS-00306: wrong number or types of arguments in call to 'JOBSFETCH' 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

如何执行这个程序,因为它只有一个输入参数?

+0

尝试此网址https://oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets –

+1

如果在调用时传递给proc的参数数量。你proc需要2个输入,并在你打电话你只传递1,因此你得到错误 – XING

回答

0

试试这个:

variable CURSOR_LIST REFCURSOR; 
exec jobsfetch('AD_ASST',:CURSOR_LIST); 
print CURSOR_LIST; 
+0

虽然这段代码可以解决这个问题,[包括解释](http://meta.stackexchange.com/questions/114762/解释完全基于代码的答案)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 –

0

您可以简单地用一个PLSQL块:

declare 
    outCur sys_refcursor; 
begin 
    jobsfetch('AD_ASST', outCur); 
    /* what you need to do with the cursor */ 
end; 
0

的问题是,你的过程有一个输出参数,但是您不提供它。

您不能exec jobsfetch('AD_ASST'); 我建议把整个东西放在一个像Aleksej这样的plsql块中。

declare 
    outCur sys_refcursor; 
begin 
    jobsfetch('AD_ASST', outCur); 
    /* what you need to do with the cursor */ 
end; 

这会给你在outCur中打开的光标,你可以做任何你需要做的事情。

相关问题