WHEN в Oracle SQL — как применять условия в CASE и MERGE

🟢 WHEN в Oracle SQL. Введение

Оператор WHEN в Oracle SQL и PL/SQL используется для реализации условий:

  • В CASE-выражениях — для выбора значения на основе условий

  • В MERGE — для указания, что делать при совпадении или отсутствии строки

  • В EXCEPTION блоках PL/SQL — для обработки разных ошибок по-разному

Его можно назвать аналитическим IF в SQL.


🔤 Написание

Внутри CASE:

sql
CASE
WHEN условие1 THEN результат1
WHEN условие2 THEN результат2
ELSE результат_по_умолчанию
END

🔄 Где часто используется

  • В условной логике в SELECT

  • В MERGE для UPDATE/INSERT условий

  • В PL/SQL при обработке исключений

  • В правилах бизнес-логики и валидации данных

  • В визуализации и форматировании результатов


🧪 10 Примеров использования WHEN с пояснениями

1️⃣ WHEN в CASE в SELECT

sql
SELECT name,
CASE
WHEN salary > 10000 THEN 'Высокая'
WHEN salary > 5000 THEN 'Средняя'
ELSE 'Низкая'
END AS уровень_зарплаты
FROM employees;

Классифицируем зарплаты по уровням.


2️⃣ ВЭН с логическим выражением

sql
SELECT id,
CASE
WHEN hire_date < SYSDATE - 365 THEN 'Старый сотрудник'
ELSE 'Недавно принят'
END AS стаж
FROM employees;

Оценка стажа работы.


3️⃣ WHEN в MERGE

sql
MERGE INTO products p
USING new_products np
ON (p.id = np.id)
WHEN MATCHED THEN
UPDATE SET price = np.price
WHEN NOT MATCHED THEN
INSERT (id, name, price)
VALUES (np.id, np.name, np.price);

WHEN MATCHED и WHEN NOT MATCHED в логике синхронизации.


4️⃣ ВЭН в PL/SQL EXCEPTION

sql
BEGIN
-- операция
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Нет данных!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Другая ошибка');
END;

Обработка разных типов ошибок.


5️⃣ WHEN в комбинированном CASE

sql
CASE deptno
WHEN 10 THEN 'IT'
WHEN 20 THEN 'HR'
WHEN 30 THEN 'Finance'
ELSE 'Other'
END

Сопоставление по значениям поля.


6️⃣ ВЭН с вложенными CASE

sql
SELECT name,
CASE
WHEN status = 'ACTIVE' THEN
CASE WHEN balance > 0 THEN 'Клиент с долгом'
ELSE 'Все ок' END
ELSE 'Неактивный'
END AS статус
FROM clients;

Комбинированная логика.


7️⃣ WHEN в RETURN

plsql
RETURN CASE
WHEN x < 0 THEN 'отрицательное'
WHEN x = 0 THEN 'ноль'
ELSE 'положительное'
END;

Условный возврат значения из функции.


8️⃣ ВЭН в UPDATE через CASE

sql
UPDATE employees
SET bonus = CASE
WHEN performance = 'HIGH' THEN salary * 0.2
WHEN performance = 'MEDIUM' THEN salary * 0.1
ELSE 0
END;

Массовое условное обновление данных.


9️⃣ WHEN в ORDER BY для кастомной сортировки

sql
SELECT * FROM tickets
ORDER BY
CASE priority
WHEN 'HIGH' THEN 1
WHEN 'MEDIUM' THEN 2
WHEN 'LOW' THEN 3
END;

Сортировка по собственному порядку.


🔟 ВЭН с NULL

sql
CASE
WHEN col IS NULL THEN 'Нет значения'
ELSE 'Значение есть'
END

Обработка пустых полей.


🧩 Заключение

Оператор WHEN в Oracle SQL — это мощный инструмент для создания гибкой и читаемой условной логики. Он помогает избегать вложенных IF в коде и делает запросы более выразительными.

💡 Запомни:

  • Используется в CASE, MERGE, EXCEPTION, PL/SQL

  • Поддерживает любые логические условия

  • Повышает читаемость и масштабируемость SQL-запросов

  • Отлично работает с ORDER BY, UPDATE, SELECT


🔜 Следующая статья:

Оператор EXPLAIN PLAN в Oracle SQL — как анализировать и оптимизировать выполнение запросов

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии