Продолжаю
рассказ про 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 поменьше получился
бы он. В результате работы данного
запроса получится следующий результат:
-
POLEDEC1Один2Два3Три4ХЗ что это5ХЗ что это
Ясно и
понятно. У CASE вроде тоже есть заморочки
с null-значением, но я еще не добрался до
них. Если сравнивать CASE и DECODE, то, по
моему мнению, проще использовать DECODE
(так как синтаксис не очень большой), но
если нужно сложное логическое выражение,
то тут лучше CASE, хоть длинно – зато не
запутаетесь.
Напоследок.
Это — моя сотая статья в этом году. Пока
удается выполнять свой план (по публикациям
25 статей в месяц). Все четыре месяца это
удавалось.
Комментариев нет:
Отправить комментарий