如何调用包含 SYS_REFCURSOR 的过程

How to call procedure that contain SYS_REFCURSOR

我创建了输出多行和多列的过程。

create or replace PROCEDURE MYPROC(
    C1 OUT SYS_REFCURSOR )
AS
BEGIN
  OPEN C1 FOR SELECT * FROM A_TABLE;
END MYPROC;

我编译的时候没有报错。 但是我不能像

那样正常调用我的程序
Exec MYPROC;

我遇到了这个错误。

Error report -
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'MYPROC'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

但是当我 运行 没有脚本时,它显示了我预期的结果。

请帮助我如何执行此程序? 谢谢。

错误是因为您没有将任何参数传递给需要 1 的过程。

你需要定义一个refcursor变量,然后把这个变量传给程序,最后读取它。

var cur refcursor;
exec MYPROC(c1 => :cur);
print cur;

var cur refcursor;
begin
    MYPROC(c1 => :cur);
end;
/
print cur;