Oracle绑定变量,程序和头痛

时间:2014-06-26 05:17:35

标签: oracle plsql procedures

我想知道你是否可以指出我正确的方向。我花了最后一小段时间试图找出如何在块代码中使用Bind变量和声明。我的问题是每次我尝试在SQL Developer中运行代码块时,它返回错误“Bind Variable”disp“都没有声明。

在非块代码中,我可以得到我期待的结果。以下我知道有效,我确实得到了结果:

var disp varchar2(200);
begin
    test_procedure('test', 100, :disp);
end;
/
print :disp

上面的代码返回一个值test100。

但是,如果我尝试将其移动到一个代码块中,我可以在外部应用程序(Java或PHP)中作为单行使用,我开始遇到麻烦。到目前为止我所拥有的是:

declare
    disp varchar2(200);
begin
    test_procedure('test', 100, :disp);
end;
/
print :disp

当我运行上述内容时,我得到了:

  

绑定变量“disp”未声明

我尝试了一些不同的方法,从声明框中使用var到尝试引用过程变量定义,但是没有一个适用于我

1 个答案:

答案 0 :(得分:5)

您不要在本地变量名前加冒号。

declare
    disp varchar2(200);
begin
    test_procedure('test', 100, disp);
end;

是一个有效的PL / SQL块。 print是一个SQL * Plus命令,因此它只适用于SQL * Plus变量,而不适用于PL / SQL块中定义的变量。如果已启用它,则可以使用dbms_output在PL / SQL中打印值

declare
    disp varchar2(200);
begin
    test_procedure('test', 100, disp);
    dbms_output.put_line( disp );
end;

在SQL Developer中,您需要首先启用输出(查看| DBMS输出以在较新版本的SQL Developer中调出窗口)。

dbms_output不是将数据返回到客户端应用程序的适当方式(或者做某些事情,你依赖于人类来查看输出以执行某些操作)。它是进行非常简单的调试或快速概念验证的有用软件包。但是你不应该假设代码的调用者为dbms_output分配了一个缓冲区来写入或者它有能力读取你写给dbms_output的内容。< / p>

相关问题