Как я могу заставить SQL Developer / SQL + запрашивать только один раз для переменной подстановки, которая встречается несколько раз в одном операторе? - PullRequest
5 голосов
/ 09 апреля 2009

У меня запрос примерно такой:

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

Но когда я запускаю его, SQL Developer дважды запрашивает у меня переменную, даже если она одна и та же.

Если есть способ заставить его запросить только один раз для переменной, которая используется дважды, как мне это сделать?

Я не хочу использовать скрипт, это должен быть один исполняемый запрос.

Ответы [ 4 ]

9 голосов
/ 09 апреля 2009

Когда я создавал этот пост, я понял, как это сделать:

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

Разработчик SQL запросит переменную связывания, вы можете ввести ее и нажать «Применить».

6 голосов
/ 20 апреля 2010
select * 
  from A_TABLE 
  where A_COLUMN = '&aVariable'
    union
 select * 
  from A_TABLE 
  where B_COLUMN = '&&aVariable';

Обратите внимание, как 2-я (и последующие) переменные будут использовать двойной амперсанд (&&)

3 голосов
/ 10 апреля 2009

Я знаю, что вы нашли другой способ сделать это, но, к вашему сведению, основной ответ таков: если вы удвоите амперсанд (например, используйте '&& aVariable'), то значение, введенное вами для переменной подстановки, будет запомнено для длины вашей сессии. Обратите внимание, что в этом случае, если вы повторно выполните запрос, вам больше не будет предложено, он будет продолжать использовать то же значение.

1 голос
/ 17 декабря 2017

Таким образом, когда вы используете & замену, вы просто используете одинарный & как более быстрый способ вместо того, чтобы вводить значение заново. При использовании && значение становится привязанным к имени переменной. Таким образом, && variable будет отличаться от && variable1. Делая это таким образом, вам будет предложено один раз, и введенное вами значение будет привязано к имени этой переменной. Проще говоря, если вы напишите свой код так:

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

Тогда, если вы хотите использовать другой набор значений, вам придется изменить имя переменной на что-то вроде этого: && aVariable3 'и' && aVariable4 'должно быть достаточно для другого набора.

...