Обновление таблицы завершается неудачно, когда мы пытаемся обновить поле, присутствующее в предложении WHERE, с помощью переменной bind, переменная bind может быть пустой или нет - PullRequest
0 голосов
/ 02 мая 2020

У меня есть oracle таблица Emp, в которой есть 3 столбца Имя, Штат, Технология (все типы данных Varchar2).

Когда я выполняю следующий запрос, обновление не выполняется должным образом.

Как я могу обновить Имя поля (или, по сути, любое из 3 полей), в зависимости от того, является ли соответствующая переменная связывания пустой или нет и соответствующее поле в таблице равно нулю или нет.

SQL Код как ниже:

UPDATE Emp
SET Name= :2
WHERE ((:2 is not null AND Name= :2) OR (:2 is null and Name is NULL)) 
  AND ((:3 is not null AND State = :3) OR (:3 is null and State is NULL)) 
  AND ((:4 is not null AND Tech = :4) OR (:4 is null and Tech is NULL));

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

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

UPDATE Emp
    SET name = coalesce(:2, name),
        state = coalesce(:3, state),
        tech = coalesce(:4 tech),
    WHERE name <> :2 OR state <> :3  OR tech <> :4;
0 голосов
/ 02 мая 2020

Вот как я понял вопрос: если значения параметров передаются, то обновите этот столбец до соответствующего значения. В противном случае оставьте все как есть.

update emp set
  name  = nvl(:par_name, name),
  state = nvl(:par_state, state),
  tech  = nvl(:par_tech, tech);
...