首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否在SQL Developer中运行存储过程?

是否在SQL Developer中运行存储过程?
EN

Stack Overflow用户
提问于 2010-10-22 04:39:43
回答 15查看 517.5K关注 0票数 84

我正在尝试运行一个具有多个in和out参数的存储过程。只能通过导航到其他用户||程序包||在我的连接面板中查看此过程

如果我右键单击,菜单项是"Order Members By...“和“创建单元测试”(灰显)。当过程被用户访问时,“运行”过程的能力似乎是不可能的。

我一直在尝试寻找如何创建匿名块的示例,以便可以将该过程作为SQL文件运行,但没有找到任何有效的方法。

有人知道如何在SQL Developer中执行此过程吗?我使用的是版本2.1.1.64。

提前感谢!

EDIT 1:

我想调用的过程有这样的签名:

代码语言:javascript
复制
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)

如果我这样写我的匿名块:

代码语言:javascript
复制
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;

我得到了错误:

代码语言:javascript
复制
Bind Varialbe "out1" is NOT DECLCARED
anonymous block completed

我尝试过初始化out*变量:

代码语言:javascript
复制
   out1 VARCHAR2(100) := '';

但是得到相同的错误:

EDIT 2:

根据Alex的回答,我尝试从params前面删除冒号,并得到以下结果:

代码语言:javascript
复制
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:
EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2010-10-22 05:45:20

使用简单的参数类型(例如,不是引用等)你可以这样做:

代码语言:javascript
复制
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绑定变量:

代码语言:javascript
复制
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;
票数 77
EN

Stack Overflow用户

发布于 2010-10-22 04:48:10

执行起来很容易。获得结果可能很难。

看看我问Best way/tool to get the results from an oracle package procedure的这个问题

它的总结是这样的。

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

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

代码语言:javascript
复制
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;
票数 29
EN

Stack Overflow用户

发布于 2015-06-03 14:37:37

对于使用SqlDeveloper 3+的用户,如果您错过了这一点:

SqlDeveloper具有直接执行存储的proc/function的功能,并以易于阅读的方式显示输出。

只需右键单击package/stored proc/ stored function,单击Run并选择target作为您要执行的proc/func,SqlDeveloper将生成要执行的代码片段(以便您可以输入参数)。一旦执行,输出参数显示在对话框的下半部分,它甚至内置了对引用光标的支持:光标的结果将显示为一个单独的输出选项卡。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3991721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档