我想知道你是否可以指出我正确的方向。我花了最后一小段时间试图找出如何在块代码中使用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到尝试引用过程变量定义,但是没有一个适用于我
答案 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>