使用cursor和out参数调用存储过程

时间:2017-02-28 12:18:46

标签: oracle oracle-sqldeveloper sqlplus oracle12c

我有以下存储过程

CREATE OR Replace  PROCEDURE sprocvPOP_GetvemployeeByFilter
  (TheFilter   varchar2,
   TheOrder     varchar2,
   PageOrder    int,
   ItemsPerPage int,
   TheCount out  number,
   cur out  sys_refcursor)as  
begin 
........
end

我想调用此过程,并打印cur参数和count参数值,因为它们是变量。

我尝试在SQL Developer中使用以下语法

set serveroutput on 
var rc refcursor;
declare
mycount number(19);
begin
execute sprocvPOP_GetvemployeeByFilter (NULL,NULL,1,10,mycount,:rc);
print rc;
dbms_output.put_line(mycount);
end;

但是我收到了错误

  

PLS-00103:当遇到以下情况之一时遇到符号“RC”:
     :=。 (@%;
  符号“:=”代替“RC”继续。

如何在SQL Developer中执行此过程并打印出参数?

1 个答案:

答案 0 :(得分:0)

要回答原始问题,print rc是SQL * Plus命令,因此它需要位于PL / SQL块之外。 execute也是SQL * Plus命令,不在PL / SQL中使用。所以你的代码应该是这样的:

set serveroutput on 
var rc refcursor;
declare
  mycount number(19);
begin
  sprocvPOP_GetvemployeeByFilter (NULL,NULL,1,10,mycount,:rc);
  dbms_output.put_line(mycount);
end;
/
print rc;

然而,事实证明您使用的是SQL Developer而不是SQL * Plus客户端来运行您的代码。 SQL Developer本身不支持很多SQL * Plus命令。 The list is here.

该工具的最新版本附带一个非常整洁的命令行界面。 Find out more

或者,使用内置的运行PL / SQL功能,如in this tutorial

所述