907 ORA-00907: отсутствует правая скобка

#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);