如何让 SQL Developer/SQL+ 对在单个语句中多次出现的替换变量只提示一次?

问题描述 投票:0回答:5

我有一个大致这样的查询:

 select * 
  from A_TABLE 
  where A_COLUMN = '&aVariable'
    union
 select * 
  from A_TABLE 
  where B_COLUMN = '&aVariable';

但是当我运行它时,SQL Developer 两次提示我输入变量,即使它是同一个变量。

如果有办法让它只提示一次使用两次的变量,我该怎么做?

我做 not 想使用脚本,它必须是单个可执行查询。

sql plsql variables substitution
5个回答
10
投票

在撰写这篇文章时,我想到了如何去做:

 :a_var
 select * 
  from A_TABLE 
  where A_COLUMN = :a_var
    union
 select * 
  from A_TABLE 
  where B_COLUMN = :a_var;

SQL Developer 然后会提示输入绑定变量,您可以输入它并点击应用。


7
投票
select * 
  from A_TABLE 
  where A_COLUMN = '&aVariable'
    union
 select * 
  from A_TABLE 
  where B_COLUMN = '&&aVariable';

注意第二个(及后续)变量将如何使用双符号 (&&)


3
投票

我知道您找到了另一种方法,但仅供参考,基本答案是,如果您将 & 符号加倍(例如,使用“&&aVariable”),那么您为替换变量输入的值将在您的长度内被记住会议。请注意,在这种情况下,如果您重新执行查询,您将不会再次收到提示,它将继续使用相同的值。


1
投票

因此,当您使用 & 替换时,您只是使用单个 & 作为一种更快的方式,而不必再次键入一个值。通过使用 && 值被锁定到变量名。所以 &&variable 与 &&variable1 不同。通过这种方式,您将收到一次提示,并且您输入的值将附加到该变量名称。简单地说,如果你这样写你的代码:

SELECT *
FROM A_TABLE
WHERE A_COLUMN = '&&aVariable1'
UNION
SELECT *
FROM A_TABLE
WHERE B_COLUMN ='&&aVariable2';

然后,如果您想使用一组不同的值,则必须将变量名称更改为类似“&&aVariable3”的名称,而“&&aVariable4”对于另一组值应该足够了。


0
投票
ACCEPT variableToPrompt PROMPT "Enter variable" DEFAULT "test";

SELECT
    *
FROM    
    TABLE
WHERE
    COLUMN = '&variableToPrompt'

请注意,仅当您的变量是字符串时才需要“&variableToPrompt”中的“。 默认值是可选的。

© www.soinside.com 2019 - 2024. All rights reserved.