Dynami c замещающая переменная - PullRequest
0 голосов
/ 05 марта 2020

Я ищу, чтобы выяснить, возможно ли заменить переменные на «Dynami c».

Например, я хочу использовать всплывающее окно для повторяемого сценария, который предлагает пользователю введите две переменные: цвет и число. Однако мне нужно, чтобы скрипт продолжал выполняться, даже если пользователь не вводит одну переменную. Другими словами, он устанавливает переменную IS NOT NULL, если оставить пустым.

Возможно ли это?

select user
from table
where colour = '&colour'
and number = &number

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Это на самом деле не то, что Oracle предназначено для выполнения (переменные подстановки, как правило, предназначены только для быстрых ad-ho c вещей, и серьезный отчет должен обрабатываться на внешнем интерфейсе).

Как хак, вы могли бы сделать что-то вроде этого:

select user
from table
where (colour = '&&colour' OR '&&colour' IS NULL)
  and (number = to_number('&&number') OR to_number('&&number') IS NULL);

Как примечание, я был немного удивлен, обнаружив, что пустая строка рассматривается как NULL в Oracle.

Очевидно, '' IS NULL оценивается как true, а '' = '' оценивается как false (что имеет смысл, поскольку любая проверка на равенство NULL является ложной)

0 голосов
/ 05 марта 2020

Для таких запросов я всегда использую функцию nvl; пример как следующие:

select user
from table
where colour = nvl('&colour', colour)
and number = nvl(&number,number)
;
...