在SQL Developer中运行存储过程?

我试图运行一个有多个参数和参数的存储过程。 该过程只能通过导航其他用户|在我的“连接”面板中查看 | 包| |

如果我右键单击,菜单项是“订单成员…”和“创buildunit testing”(灰色)。 当用户访问时,“运行”程序的能力似乎不可能。

我一直在试图find一个如何创build一个匿名块的例子,以便我可以作为一个SQL文件运行该过程,但没有发现任何工作。

有谁知道我可以从SQL Developer执行此过程吗? 我正在使用版本2.1.1.64。

提前致谢!

编辑1:

我想要调用的过程有以下签名:

user.package.procedure( p_1 IN NUMBER, p_2 IN NUMBER, p_3 OUT VARCHAR2, p_4 OUT VARCHAR2, p_5 OUT VARCHAR2, p_6 OUT NUMBER) 

如果我写这样的匿名块:

 DECLARE out1 VARCHAR2(100); out2 VARCHAR2(100); out3 VARCHAR2(100); out4 NUMBER(100); BEGIN EXECUTE user.package.procedure (33,89, :out1, :out2, :out3, :out4); END; 

我得到的错误:

 Bind Varialbe "out1" is NOT DECLCARED anonymous block completed 

我试着初始化out *variables:

  out1 VARCHAR2(100) := ''; 

但得到相同的错误:

编辑2:

基于Alex的回答,我尝试从参数前面去除冒号并得到这个结果:

 Error starting at line 1 in command: DECLARE out1 VARCHAR2(100); out2 VARCHAR2(100); out3 VARCHAR2(100); out4 NUMBER(100); BEGIN EXECUTE user.package.procedure (33,89, out1, out2, out3, out4); END; Error report: ORA-06550: line 13, column 17: PLS-00103: Encountered the symbol "USER" when expecting one of the following: := . ( @ % ; immediate The symbol ":=" was substituted for "USER" to continue. 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action: 

使用简单的参数types(即不是refcursors等),你可以做这样的事情:

 SET serveroutput on; DECLARE InParam1 number; InParam2 number; OutParam1 varchar2(100); OutParam2 varchar2(100); OutParam3 varchar2(100); OutParam4 number; BEGIN /* Assign values to IN parameters */ InParam1 := 33; InParam2 := 89; /* Call procedure within package, identifying schema if necessary */ schema.package.procedure(InParam1, InParam2, OutParam1, OutParam2, OutParam3, OutParam4); /* Display OUT parameters */ dbms_output.put_line('OutParam1: ' || OutParam1); dbms_output.put_line('OutParam2: ' || OutParam2); dbms_output.put_line('OutParam3: ' || OutParam3); dbms_output.put_line('OutParam4: ' || OutParam4); END; / 

编辑使用OP的规范,并使用替代方法:var绑定variables:

 var InParam1 number; var InParam2 number; var OutParam1 varchar2(100); var OutParam2 varchar2(100); var OutParam3 varchar2(100); var OutParam4 number; BEGIN /* Assign values to IN parameters */ :InParam1 := 33; :InParam2 := 89; /* Call procedure within package, identifying schema if necessary */ schema.package.procedure(:InParam1, :InParam2, :OutParam1, :OutParam2, :OutParam3, :OutParam4); END; / -- Display OUT parameters print :OutParam1; print :OutParam2; print :OutParam3; print :OutParam4; 

执行简单。 获得结果可能很难。

看看这个问题,我问最好的方式/工具来从一个oracle包过程中得到的结果

它的总结是这样的。

假设你有一个名为mypackage的包和一个名为getQuestions的过程。 它返回一个refcursor并接受string用户名。

所有你需要做的是创build新的SQL文件(文件新)。 设置连接并粘贴到下面并执行。

 var r refcursor; exec mypackage.getquestions(:r, 'OMG Ponies'); print r; 

在SQL Developer中打开过程并从那里运行它。 SQL Developer显示它运行的SQL。

 BEGIN PROCEEDURE_NAME_HERE(); END; 

对于那些使用SqlDeveloper 3+,如果你错过了:

SqlDeveloper具有直接执行存储过程/函数的function,输出以易于阅读的方式显示。

只需右键单击包/存储过程/存储函数,单击Run ,selecttarget是要执行的proc / func,SqlDeveloper将生成要执行的代码片段(以便您可以将您的input参数)。 一旦执行完成,输出参数将显示在对话框的下半部分,甚至内置了对参考光标的支持:光标结果将显示为单独的输出选项卡。

使用:

 BEGIN PACKAGE_NAME.PROCEDURE_NAME(parameter_value, ...); END; 

用你所需要的replace“PACKAGE_NAME”,“PROCEDURE_NAME”和“parameter_value”。 OUT参数需要在之前声明。

这些其他答案都没有为我工作。 以下是我在SQL Developer 3.2.20.10中运行一个过程所必须做的事情:

 SET serveroutput on; DECLARE testvar varchar(100); BEGIN testvar := 'dude'; schema.MY_PROC(testvar); dbms_output.enable; dbms_output.put_line(testvar); END; 

然后,你必须去查看表格,看看你的proc是如何处理这个传入的variables的 – 输出结果只是确认variables接收到了这个值(理论上,它传递给了proc)。

注意 (与我的不同之处):

  • :在variables名称之前
  • 没有把.package..packages. 模式名称和过程名称之间
  • 不必在variables的值中join&
  • 没有使用任何地方print
  • 没有使用var来声明variables

所有这些问题都让我搔了搔脑筋,而这些答案也带有这些令人毛骨悚然的错误。

不能相信,这将不会在SQL Developer中执行:

 var r refcursor; exec PCK.SOME_SP(:r, '02619857'); print r; 

但是这将会:

 var r refcursor; exec TAPI_OVLASCENJA.ARH_SELECT_NAKON_PRESTANKA_REG(:r, '02619857'); print r; 

显然,一切都必须在一行

使用SQL Developer版本4.0.2.15生成15.21以下工作:

 SET SERVEROUTPUT ON var InParam1 varchar2(100) var InParam2 varchar2(100) var InParam3 varchar2(100) var OutParam1 varchar2(100) BEGIN /* Assign values to IN parameters */ :InParam1 := 'one'; :InParam2 := 'two'; :InParam3 := 'three'; /* Call procedure within package, identifying schema if necessary */ schema.package.procedure(:InParam1, :InParam2, :InParam3, :OutParam1); dbms_output.enable; dbms_output.put_line('OutParam1: ' || :OutParam1); END; / 

我无法获得@Alex Poole解答工作。 但是,通过试验和错误,我发现了以下工作(使用SQL Developer版本3.0.04)。 张贴在这里,以防止他人帮忙:

 SET serveroutput on; DECLARE var InParam1 number; var InParam2 number; var OutParam1 varchar2(100); var OutParam2 varchar2(100); var OutParam3 varchar2(100); var OutParam4 number; BEGIN /* Assign values to IN parameters */ InParam1 := 33; InParam2 := 89; /* Call procedure within package, identifying schema if necessary */ schema.package.procedure(InParam1, InParam2, OutParam1, OutParam2, OutParam3, OutParam4); /* Display OUT parameters */ dbms_output.put_line('OutParam1: ' || OutParam1); dbms_output.put_line('OutParam2: ' || OutParam2); dbms_output.put_line('OutParam3: ' || OutParam3); dbms_output.put_line('OutParam4: ' || OutParam4); END; 

如果你有很多程序有很多的参数,创buildPI / SQL块会很痛苦。 有一个应用程序写在python上,为你做。 它使用过程声明来parsing文件,并创buildWeb应用程序以便于程序调用。

 var out_para_name refcursor; execute package_name.procedure_name(inpu_para_val1,input_para_val2,... ,:out_para_name); print :out_para_name;