这个 PL/SQL 有啥问题?绑定变量 * 未声明

Posted

技术标签:

【中文标题】这个 PL/SQL 有啥问题?绑定变量 * 未声明【英文标题】:What is wrong with this PL/SQL? Bind Variable * is NOT DECLARED这个 PL/SQL 有什么问题?绑定变量 * 未声明 【发布时间】:2009-10-20 23:09:14 【问题描述】:

这里是:

declare
  v_str1   varchar2(80);
begin
  v_str1 := 'test';
  print :v_str1;
end

当我在 sql 工作表中使用 SQLDeveloper 运行它时,我得到了这个:

Bind Variable "v_str1" is NOT DECLARED
anonymous block completed

【问题讨论】:

什么是“打印”?我知道没有同名的 PL/SQL 命令。 【参考方案1】:

知道了:

set serveroutput on

declare
  v_str1   varchar2(80);    
begin
 v_str1 := 'test';
 dbms_output.put_line(v_str1);
end;

More info here.

【讨论】:

【参考方案2】:

:VARNAME 形式的绑定变量语法主要用于 SQL* Plus(我认为动态 SQL 的绑定变量除外)。 对于 SQL* Developer、PL/SQL Developer 或其他应用程序,有用于变量替换的“&”:

declare v_str1 varchar2(80); begin v_str1 := &v_str; print v_str1; end

编辑: 我的错,Oracle SQL*Developer 的代码应该是:


set serveroutput on;
declare
  v_str1   varchar2(80);
begin
  v_str1 := '&v_str';
  dbms_output.put_line(v_str1);
end;

您必须选择所有内容并执行它。结果将出现在“脚本输出”面板中。

【讨论】:

它提示输入 V_str 的值,然后抛出错误 ORA-06550。如果将其更改为打印 :V_str1;你得到绑定变量“v_str1”未声明。【参考方案3】:

print 不是 PLSQL 函数。如果你想得到一个输出,你可以使用dbms_output.put_line(v_str1);

set serveroutput on;    
declare v_str1 varchar2(80);
begin
    v_str1 := 'test'; 
    dbms_output.put_line(v_str1);
end;

:v_str1 是一个绑定变量,但不能在 plsql 中声明。声明时必须使用 VARIABLE 关键字。

【讨论】:

【参考方案4】:

试试

declare
  v_str1   varchar2(80);
begin
  v_str1 := 'test';
  print v_str1;
end

【讨论】:

以上是关于这个 PL/SQL 有啥问题?绑定变量 * 未声明的主要内容,如果未能解决你的问题,请参考以下文章

这个程序有啥错误?

如何解决 SP2-0552:未声明绑定变量?

SP2-0552:未声明绑定变量“NEW”

sqlplus pl/sql Date/Time 用户输入理解为绑定变量

oracle 的 PL/SQL 中的 & 和 : 有啥区别?

这个 PL/SQL 函数有啥问题?