我有一个大致这样的查询:
select *
from A_TABLE
where A_COLUMN = '&aVariable'
union
select *
from A_TABLE
where B_COLUMN = '&aVariable';
但是当我运行它时,SQL Developer 两次提示我输入变量,即使它是同一个变量。
如果有办法让它只提示一次使用两次的变量,我该怎么做?
我不想使用脚本,它必须是单个可执行查询。
我有一个大致这样的查询:
select *
from A_TABLE
where A_COLUMN = '&aVariable'
union
select *
from A_TABLE
where B_COLUMN = '&aVariable';
但是当我运行它时,SQL Developer 两次提示我输入变量,即使它是同一个变量。
如果有办法让它只提示一次使用两次的变量,我该怎么做?
我不想使用脚本,它必须是单个可执行查询。
当我撰写这篇文章时,我想出了如何去做:
:a_var
select *
from A_TABLE
where A_COLUMN = :a_var
union
select *
from A_TABLE
where B_COLUMN = :a_var;
然后 SQL Developer 将提示输入绑定变量,您可以输入它并点击应用。
select *
from A_TABLE
where A_COLUMN = '&aVariable'
union
select *
from A_TABLE
where B_COLUMN = '&&aVariable';
请注意第二个(和后续)变量将如何使用双与号 (&&)
我知道您找到了另一种方法,但仅供参考,基本答案是,如果您将 & 符号加倍(例如,使用 '&&aVariable'),那么您为替换变量输入的值将在您的会话长度内被记住. 请注意,在这种情况下,如果您重新执行查询,您将不会再次收到提示,它将继续使用相同的值。
因此,当您使用 & 替换时,您只是使用单个 & 作为一种更快的方式,而不必再次键入一个值。通过使用 &&,值将锁定在变量名中。所以 &&variable 与 &&variable1 不同。通过这种方式,您将收到一次提示,并且您输入的值将与该变量名一致。简单地说,如果您这样编写代码:
SELECT *
FROM A_TABLE
WHERE A_COLUMN = '&&aVariable1'
UNION
SELECT *
FROM A_TABLE
WHERE B_COLUMN ='&&aVariable2';
然后,如果您想使用一组不同的值,则必须将变量名称更改为类似“&&aVariable3”的名称,而“&&aVariable4”对于另一组值应该足够了。
ACCEPT variableToPrompt PROMPT "Enter variable" DEFAULT "test";
SELECT
*
FROM
TABLE
WHERE
COLUMN = '&variableToPrompt'
请注意,只有当您的变量是字符串时,才需要 '&variableToPrompt' 中的 '。默认值是可选的。