#oracle
Вопрос:
у меня 907 ORA-00907: отсутствует правая скобка.
UPDATE A SET DELETE_FLAG = 'Y' WHERE DELETE_FLAG = 'N' AND IF (? is not null, B = ?, 1=1) AND IF (? is not null, C = ?, 1=1) AND IF (? is not null, D = ?, 1=1);
Как использовать Oracle sql для ее решения?
Ответ №1:
IF
недопустимый синтаксис. Использовать AND
и OR
:
UPDATE A SET DELETE_FLAG = 'Y' WHERE DELETE_FLAG = 'N' AND (? IS NULL OR B = ?) AND (? IS NULL OR C = ?) AND (? IS NULL OR D = ?);
Или, если вы используете именованные переменные привязки (при условии, что вы повторяете параметры ?
привязки для одного и того же значения):
UPDATE A SET DELETE_FLAG = 'Y' WHERE DELETE_FLAG = 'N' AND (:param1 IS NULL OR B = :param1) AND (:param2 IS NULL OR C = :param2) AND (:param3 IS NULL OR D = :param3);