вторник, 30 апреля 2013 г.

CASE - PL/SQL

Продолжаю рассказ про Oracle PL/SQL. Вчера я рассмотрел функцию DECODE (часто ею пользуюсь), сегодня пришел черед выражения CASE. CASE’ом я пользуюсь редко, обычно в первую очередь использую DECODE, а если уж он не справляется – то уже только тогда CASE юзаю.

Кстати, пока не забыл — если вы программируете на PL/SQL часть базы для сайта, то этот сайт можно легко раскрутить. Сделать это поможет компания ПрайсАрт — двадцать специалистов сделают все, что нужно. Если почитать их сайт (http://priceart.net) — работают уже много лет, куча клиентов, работа точно будет качественной. Пользуйтесь. А теперь — вернусь к CASE.


CASE 

Суть данного выражения заключается в том, что CASE позволяет использовать конструкцию if..then..else в коде запроса, но без использования какой-либо логики. Как и в случае функции DECODE сначала опишу упрощенный синтаксис этого выражения, а ниже – уже словами расскажу: 

SELECT CASE Исходное_значение WHEN [ поисковые_значения ] THEN [ значения для вывода ] ELSE по_умолчанию END AS pseudonym FROM table; 

Здесь надо весь запрос привести. Сначала выбирается исходное значение (с чем будем сравнивать), затем, с помощью WHEN .. THEN проверяется это значение на равенство с поисковым значением. Если ничего не подошло – отрабатывает ELSE. Обязательно надо давать всей этой конструкции псевдоним (с помощью AS). И END так же нужно ставить обязательно. 

Синтаксис логичный (неоднократно же сталкиваемся с ним в своей работе), но запрос получается длинным. Вот такой пример приведу:

SELECT CASE tab.pole
WHEN 1 THEN
'Один'
WHEN 2 THEN
'Два'
WHEN 3 THEN
'Три'
ELSE
'ХЗ что это'
END AS dec
FROM (SELECT 1 pole
FROM dual t
UNION ALL
SELECT 2
FROM dual t
UNION ALL
SELECT 3
FROM dual t
UNION ALL
SELECT 4
FROM dual t
UNION ALL
SELECT 5 FROM dual t) tab

Я думаю что с помощью DECODE поменьше получился бы он. В результате работы данного запроса получится следующий результат:

POLE
DEC
1
Один
2
Два
3
Три
4
ХЗ что это
5
ХЗ что это

Ясно и понятно. У CASE вроде тоже есть заморочки с null-значением, но я еще не добрался до них. Если сравнивать CASE и DECODE, то, по моему мнению, проще использовать DECODE (так как синтаксис не очень большой), но если нужно сложное логическое выражение, то тут лучше CASE, хоть длинно – зато не запутаетесь.

Напоследок. Это — моя сотая статья в этом году. Пока удается выполнять свой план (по публикациям 25 статей в месяц). Все четыре месяца это удавалось.

Комментариев нет:

Отправить комментарий