SQL: обновить поле до NULL, если значение привязки равно ему, иначе оставить нетронутым без PL / SQL? - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть таблица с полем NUMERIC(38,0) с именем FOO.В операторе UPDATE я уже обновляю два других поля VARCHAR2, BAR и BAZ, безоговорочно.

Как можно умно обновить FOO до NULL, если значение привязки равнона FOO, остальное оставить нетронутым?Из-за различных ограничений, я должен быть в состоянии сделать это без PL / SQL.

Пример # 1: Если текущая запись имеет FOO как 123, мне нужен оператор UPDATE с FOO=123, BAR='Abc', BAZ='Def', чтобы обновить BAR и BAZ и установить FOO в NULL.

Пример # 2: Если текущая запись имеет FOO как 123, мне нужен оператор UPDATE с FOO=299, BAR='Abc', BAZ='Def', чтобы обновить BAR и BAZ, но оставить FOO как 123.

БД - это Oracle

Я пытался приготовить что-нибудь умное с BITAND и nvl + другими, но не совсем нашел что-то, что работает.

Спасибо!- vgort

1 Ответ

2 голосов
/ 09 ноября 2011

попробуйте

UPDATE MyTable A SET
A.FOO = CASE WHEN A.FOO = YourBoundFOO THEN NULL ELSE A.FOO END,
A.BAR = 'Abc',
A.BAT = 'Def'
WHERE...

РЕДАКТИРОВАТЬ - согласно комментарию Андрея М:

Альтернативой CASE будет использование

A.FOO = NULLIF (A.FOO,YourBoundFOO),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...