【发布时间】:2011-04-28 20:23:05
【问题描述】:
我正在尝试运行具有多个输入和输出参数的存储过程。该过程只能通过导航其他用户 | 在我的连接面板中查看。 |包 | |
如果我右键单击,菜单项是“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)
如果我这样写我的匿名块:
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* 变量:
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:
【问题讨论】:
-
尝试将 OUT 变量放在 BEGIN 中,在过程执行语句之前。
-
你不需要
execute;在 PL/SQL 中被解释为execute immediate的开头,这与 SQLexecute不同。 -
@sdoca:你现在混淆了两种方法;使用您的编辑 2 版本,只需删除单词
execute。declare应该在begin之前。我认为@OMG 的意思是你可以在SQL Developer 中使用variable关键字在匿名块之前声明变量,然后像原来一样使用:out1语法,在这种情况下你没有declare部分。但是您将上次评论中的两者混为一谈。 -
是的,我知道我很困惑,但不太确定在哪里/如何。
标签: oracle stored-procedures oracle-sqldeveloper