В хранимой процедуре (в нашем случае Oracle) я хочу добавить некоторые значения в существующую запись. Проблема в том, что как существующее значение, так и добавляемое значение могут быть нулевыми. Я хочу, чтобы результат был равен NULL, когда оба операнда равны нулю. Если только один из них является нулевым, я хочу, чтобы результатом был другой операнд. Если оба значения не равны нулю, я хочу, чтобы результат был «нормальным» дополнением.Дополнение с NULL значениями
Вот что я использую до сих пор:
SELECT column INTO anz_old FROM aTable Where <someKeyCondition>;
IF anz_old IS NULL
THEN
anz_new := panzahl;
ELSE
anz_new := anz_new + NVL (panzahl, 0);
END IF;
UPATE aTabel set column = anz_new Where <someKeyCondition>;
Есть ли более элегантный способ (pereferably полностью в SQL, т.е. только в операторе обновлений не хватает длинного CASE-Заявления основного с той же логикой, приведенный выше код)?
Ответ Coalesce интересен. Для более чем двух значений или другого логического вида мне нравится: ISNULL (a, 0.0) + ISNULL (b, 0.0) + ISNULL (c, 0.0) –
Я предполагаю, что ISNULL для T-SQL, Coalesce или NVL будет подходит для Oracle, как используется в вопросе. –
@Mister_Tom Ваш ответ вернет 0 для всех входов null. Мой 'coalesce (a + b, a, b)' возвращает null, что может быть или не быть тем, что требуется. Если вы хотите, чтобы он возвращал 0, вы могли бы использовать 'coalesce (a + b, a, b, 0)'. Я отредактировал свой ответ, чтобы добавить этот дополнительный параметр. – rjmunro