6

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

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

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

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

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

4

5 回答 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 将提示输入绑定变量,您可以输入它并点击应用。

于 2009-04-09T18:48:48.397 回答
7
select * 
  from A_TABLE 
  where A_COLUMN = '&aVariable'
    union
 select * 
  from A_TABLE 
  where B_COLUMN = '&&aVariable';

请注意第二个(和后续)变量将如何使用双与号 (&&)

于 2010-04-20T15:45:58.720 回答
3

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

于 2009-04-09T20:41:29.097 回答
1

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

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

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

于 2017-12-17T20:24:09.837 回答
0
ACCEPT variableToPrompt PROMPT "Enter variable" DEFAULT "test";

SELECT
    *
FROM    
    TABLE
WHERE
    COLUMN = '&variableToPrompt'

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

于 2020-01-10T17:08:56.527 回答