oracle - 如何解决 SP2-0552 : Bind variable not declared?

标签 oracle variables plsql

当我运行这个 PL/SQL block 时:

SQL> set serveroutput on
SQL> declare
  2  v_max_sal NUMBER(20)
  3  begin
  4  select max(sal) INTO :v_max_sal
  5  from emp e, dept d
  6  where e.deptno=d.deptno
  7  and d.dname='SALES';
  8  END;
  9  /

它向我抛出下一个错误:SP2-0552:未声明绑定(bind)变量“V_MAX_SAL”。我遗漏了什么或做错了什么?

最佳答案

如果你确实想要一个绑定(bind)变量,那么你需要在 block 之外声明它:

variable v_max_sal number;

begin
  select max(sal)
  into :v_max_sal
  from dept d
  join emp e
  on e.deptno=d.deptno
  where d.dname='SALES';
end;
/

print v_max_sal

请注意 SQL*Plus client variableprint命令,并且 block 中不再有 declare 部分,因为您现在没有或不需要本地 PL/SQL 变量。局部变量在查询中使用时可以充当绑定(bind)变量 - 解析器会看到它,并且您会在查询的计划中看到占位符 - 但它并不完全相同,因为您通常需要绑定(bind)变量可以在 Pl/SQL 代码之外引用。

我也使用了现代连接语法,尽管这与问题无关。

关于oracle - 如何解决 SP2-0552 : Bind variable not declared?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36114265/

相关文章:

oracle - 如何同步多台机器插入一行?

c++ - 规范化变量名 C/C++

C# Selenium : passing a variable into XPath

sql - Oracle 创建过程特权?

oracle - oracle 在哪里存储用户定义的异常?

linux - ORA-00257: 归档程序错误。仅在内部连接,直到释放

Jquery 比较两个变量看它们是否匹配,但其中一个超出范围?

sql - oracle多条件动态sql

oracle - SELECT COUNT(*) 与使用显式游标获取两次

sql - 当 JOB 执行的过程没有完成时,JOB 何时再次执行它时会发生什么?