当我运行这个 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 variable
和 print
命令,并且 block 中不再有 declare
部分,因为您现在没有或不需要本地 PL/SQL 变量。局部变量在查询中使用时可以充当绑定(bind)变量 - 解析器会看到它,并且您会在查询的计划中看到占位符 - 但它并不完全相同,因为您通常需要绑定(bind)变量可以在 Pl/SQL 代码之外引用。
我也使用了现代连接语法,尽管这与问题无关。
关于oracle - 如何解决 SP2-0552 : Bind variable not declared?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36114265/