如果您想继续使用替换变量,您可以使用the column ... new_value functionality(该文档适用于 SQL*Plus,但主要适用于 SQL Developer;并专注于将其用于报告标题,但它比建议的更有用):
-- define not needed now
--def var1 = '1234'
--def var2 = '5678'
column var1 new_value var1
select somenumber as var1 from ... where ...
column var2 new_value var2
select somenumber as var2 from ... where ...
select a.id
from tablea a
where something.id = (select other.id from .... where number1 = &var1 and number2 = &var2)
一个简单的例子来展示这一点;如果工作表有:
column var1 new_value var1
select 1234 as var1 from dual;
column var2 new_value var2
select 5678 as var2 from dual;
select * from dual where 1234 = &var1 and 5678 = &var2;
然后脚本输出窗格显示:
VAR1
----------
1234
VAR2
----------
5678
old:select * from dual where 1234 = &var1 and 5678 = &var2
new:select * from dual where 1234 = 1234 and 5678 = 5678
D
-
X
或者你可以使用绑定变量:
var var1 number;
var var2 number;
begin
select somenumber into :var1 from ... where ...
select somenumber into :var2 from ... where ...
end;
/
select a.id
from tablea a
where something.id = (select other.id from .... where number1 = :var1 and number2 = :var2)
请注意,对var1 和var2 的引用现在以冒号开头,表示绑定变量,而不是与符号表示替换变量;并且该冒号也出现在 into :var1 部分中 - 它仍然指的是绑定变量,而不是本地 PL/SQL 变量。
又是一个简单的例子;工作表脚本:
var var1 number;
var var2 number;
begin
select 1234 into :var1 from dual;
select 5678 into :var2 from dual;
end;
/
select * from dual where 1234 = :var1 and 5678 = :var2;
得到输出:
PL/SQL procedure successfully completed.
D
-
X
如果您想查看匿名 PL/SQL 块分配的值,可以使用 print var1。