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

StackOverflow https://stackoverflow.com/questions/735429

Вопрос

У меня есть запрос примерно такого рода:

 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';

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top