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

SELECT * FROM mytable WHERE col1 = <ONEVAL> col2 = <ONEVAL> AND col3 = <ONEVAL>;

Я знаю из ответа SO Как использовать одно и то же значение несколько раз в подготовленном операторе jdbc postgresql, который JDBC не поддерживает именованные параметры, поэтому прямой подготовленный оператор

SELECT * FROM mytable WHERE col1 = ? AND col2 = ? AND col3 = ?;

Работает только в том случае, если я предоставлю <ONEVAL> 3 раза, но я не хочу этого делать, я предпочитаю настроить SQL подготовленного оператора так, чтобы он занимал только один ?, но применял его к все условия WHERE. Что-то вроде

WITH VAl = ? SELECT * FROM mytable WHERE col1 = VAL AND col2 = VAL AND col3 = VAL;

Но похоже, что эта попытка не сработает . Есть ли способ сделать такое многократное использование одного параметра подготовленного оператора в строке SQL?

Другие вещи, которые я пробовал:

После любезного предложения @Selvin я использовал следующую строку SQL для подготовленного оператора:

DECLARE val varchar(30) :=? ; SELECT * FROM mytable WHERE col1=&val AND col2=&val AND col3=&val

Затем я получаю сообщение об ошибке « ORA-06550: строка 1, столбец 33: PLS-00103: обнаружен символ« ВЫБРАТЬ »при ожидании одного из следующих событий: [...]»

0
halloleo 9 Апр 2021 в 05:34

1 ответ

Лучший ответ

Если я правильно понял, вам нужно, чтобы все три столбца одновременно были равны одному и тому же значению, поэтому я предполагаю, что этот SQL поможет вам

SELECT * FROM mytable WHERE col1 = ? AND col1 = col2 AND col1 = col3;

UPD: Есть идея получше или я бы сказал компактнее

SELECT * FROM mytable WHERE ? = all(col1, col2, col3)
2
ekochergin 9 Апр 2021 в 05:36