Это на самом деле не то, что 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
является ложной)