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

Posted

技术标签:

【中文标题】SP2-0552:未声明绑定变量“N3”【英文标题】:SP2-0552: Bind variable "N3" not declared 【发布时间】:2021-05-25 13:31:50 【问题描述】:

这是比较三个数字并打印最大值的代码。

declare
n1 number(2);
n2 number(2); 
n3 number(2); 
begin
n1:=&n1;
n2:=&n2:
n3:=&n3;
if n1>n2 and n1>n3 then
dbms_output.put_line('The greatest number is n1 '||n1);
else if n2>n1 and n2>n3 then
dbms_output.put_line('The greatest number is n2 '||n2);
else 
dbms_output.put_line('The greatest number is n3 '||n3);
end if;
end;
/

当我尝试在 oracle 中运行这个 pl sql 代码时,它说

old   6: n1:=&n1;
new   6: n1:=4;
Enter value for n2: 5
old   7: n2:=&n2:
new   7: n2:=5:
Enter value for n3: 6
old   8: n3:=&n3;
new   8: n3:=6;
SP2-0552: Bind variable "N3" not declared.

你能告诉我哪里错了吗???不胜感激

【问题讨论】:

为什么不用oracleGREATEST函数呢?它非常适合您的目的 好的,但是你能告诉我这有什么问题吗??? 当然,正常的做法是创建一个 SP,而不是使用匿名块。 @JaimeDrq GREATEST 告诉您哪个是最大值,但不告诉您哪个变量最大。此外,当存储过程是一次性计算并且您不想/不需要在数据库中创建过程时,存储过程也不合适。 @JaimeDrq GREATEST 函数会告诉您最大值是3,但它不会告诉您包含最大值的变量是,例如,N2。 OP 正在查找最大值和包含该最大值的变量的标识。 【参考方案1】:

你有 3 个错误(错别字):

在开始声明变量之前,您需要 DECLARE 关键字。 n2:=&n2: 应该是 n2:=&n2; else if 应该是 elsif(或者,如果您想保留 else if,那么您需要第二个 end if; 来终止第二个 if 语句)
DECLARE
  n1 number(2);
  n2 number(2); 
  n3 number(2); 
begin
  n1:=&n1;
  n2:=&n2;
  n3:=&n3;
  if n1>n2 and n1>n3 then
    dbms_output.put_line('The greatest number is n1 '||n1);
  elsif n2>n1 and n2>n3 then
    dbms_output.put_line('The greatest number is n2 '||n2);
  else 
    dbms_output.put_line('The greatest number is n3 '||n3);
  end if;
end;
/

【讨论】:

以上是关于SP2-0552:未声明绑定变量“N3”的主要内容,如果未能解决你的问题,请参考以下文章

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

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

SP2-0552:未声明绑定变量“NEW”并且 END 错误报告 - 未知命令

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

这个程序有啥错误?

未声明绑定变量“D”