在SQL Developer中运行存储过程?

sdo*_*oca 75 oracle stored-procedures oracle-sqldeveloper

我正在尝试运行具有多个输入和输出参数的存储过程.只能通过导航其他用户|在我的"连接"面板中查看该过程 | 包裹| |

如果我右键单击,则菜单项为"Order Members By ..."和"Create Unit Test"(灰色显示).当用户访问过程时,似乎无法"运行"该过程.

我一直试图找到一个如何创建匿名块的示例,以便我可以将该过程作为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)
Run Code Online (Sandbox Code Playgroud)

如果我写这样的匿名块:

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;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Bind Varialbe "out1" is NOT DECLCARED
anonymous block completed
Run Code Online (Sandbox Code Playgroud)

我已经尝试初始化out*变量:

   out1 VARCHAR2(100) := '';
Run Code Online (Sandbox Code Playgroud)

但得到同样的错误:

编辑2:

根据Alex的回答,我尝试从params前面移除冒号并得到:

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:
Run Code Online (Sandbox Code Playgroud)

Ale*_*ole 74

使用简单的参数类型(即不是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;
/
Run Code Online (Sandbox Code Playgroud)


编辑使用OP的规范,并使用另一种方法来使用:var绑定变量:

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;
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的帮助和详细的答案。我相信这也会对其他人有所帮助。要注意的一件事是,它们必须作为脚本而不是语句运行。 (2认同)

Con*_*rix 26

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

看看这个问题我问了最好的方法/工具来从oracle包程序中获取结果

它的摘要是这样的.

假设你有一个名为mypackage的程序包和名为getQuestions的程序.它返回一个refcursor并接受字符串用户名.

您所要做的就是创建新的SQL文件(新文件).设置连接并粘贴以下内容并执行.

var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;
Run Code Online (Sandbox Code Playgroud)

  • 我不得不使用完整的单词"execute"而不是"exec" (3认同)

Adr*_*hum 17

对于那些使用SqlDeveloper 3+的用户,万一你错过了:

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

只需右键单击包/存储过程/存储函数,单击Run并选择target要执行的proc/func,SqlDeveloper将生成要执行的代码片段(以便您可以输入您的输入参数).执行后,输出参数显示在对话框的下半部分,甚至内置支持ref游标:光标的结果将显示为单独的输出选项卡.

  • 这应该是选定的答案。 (2认同)

小智 11

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

BEGIN
  PROCEEDURE_NAME_HERE();
END;
Run Code Online (Sandbox Code Playgroud)


OMG*_*ies 6

使用:

BEGIN

  PACKAGE_NAME.PROCEDURE_NAME(parameter_value, ...);

END;
Run Code Online (Sandbox Code Playgroud)

将"PACKAGE_NAME","PROCEDURE_NAME"和"parameter_value"替换为您需要的内容.OUT参数需要在之前声明.