Универсальное значение для параметра в предложении WHERE подготовленного оператора?

У меня есть следующий подготовленный оператор, который я отправляю через драйвер JDBC в базу данных Oracle:

SELECT * FROM mytable WHERE ? = ANY(col1, col2)

Теперь, обычно, когда я выполняю это как запрос, я предоставляю значение, которое существует в col1 или col2, и Oracle покорно возвращает все строки, содержащие это значение.

Однако я хотел бы использовать тот же подготовленный оператор для выборки всех строк в таблице, предоставив что-то вроде параметра подстановки. Я пробовал строки типа *, но он всегда возвращает нет строк.

Существует ли значение параметра в этом подготовленном операторе, с помощью которого я извлекаю все строки?


person halloleo    schedule 13.04.2021    source источник


Ответы (2)


Вы можете попробовать:

where nvl(?, col1) in (col1, col2)

и передайте null, если вам нужны все значения.

person eaolson    schedule 13.04.2021
comment
Спасибо именно то, что я хотел. Большое спасибо. - person halloleo; 14.04.2021

Вы часто использовали бы NULL для этой цели. Что-то вроде этого:

WHERE ? IN (col1, col2) OR ? IS NULL
person Gordon Linoff    schedule 13.04.2021
comment
Интересная идея, однако с вашим утверждением я вижу проблему, заключающуюся в том, что мне всегда приходится предоставлять ему значения 2 - только для редкого дополнительного случая полного списка. (Для обсуждения нескольких? см., например, этот вопрос.) - person halloleo; 13.04.2021
comment
@ аллилео . . . Я бы порекомендовал вам использовать именованный параметр, например, where :param in (col1, col2) or :param is null. - person Gordon Linoff; 13.04.2021
comment
Поддерживает ли драйвер JDBC именованные параметры в подготовленных операторах? Из того, что я прочитал, нет. - person halloleo; 13.04.2021