Всем привет! :)

Да уж, давно не писал в блог, начну сейчас исправляться! Сначала отпуск был продолжительный, а потом еще и заболел, все это отодвигало публикацию новых статей.

В этой статье я хочу написать про функцию sql, которая доступна только в СУБД Oracle. Функция называется «DECODE», представляющая собой упрощенный вариант выражения «CASE WHEN»:

DECODE (<Контрольное значение>, <Значение1>, <Значение2>, <Значение3>, <Значение4>…<Дефолтное значение>)

Здесь, «Контрольное значение» — это значение, которое проверяется.

 Т.е. это эквивалентно этому:

CASE <контрольное значение>
     WHEN <значение1> THEN <значение2>
     WHEN <значение3> THEN <значение4>
     ...
     ELSE <последнее значение> END

Задача программиста — правильно соотнести пары значений после первоначальной переменной, т.е. «<Контрольного значения>».

Приведу очень примитивный пример:

SELECT decode ('Вова1'
                     , '8', 'Вова'
                     , 'Вова', 'Вова4'
                     , 'Дима')
FROM dual

Что вернет этот запрос!? А он вернет ответ «Дима», а без значения «Дима», вернет NULL. Т.к. здесь значение «Дима» — это дефолтное и есть значение, т.е. которое возвращается по умолчанию.

Хотел сделать одно замечание — эта функция достаточно сложна для понимания и её использование может привести к ошибкам в запросах, поэтому лучше использовать другие похожие функции — Nvl  и Coalesce. Чаще всего именно с помощью них можно решить нужные задачи в обработке null-значений без помощи функции Decode.

Если что-то будет непонятно, пишите в комментариях, всегда попробую помочь :)

Update  — Спасибо всем, кто нашел ошибку в тексте данной статьи, невнимательно некоторые вещи написал, поздно было, спал видимо :)

Удачи!