WHENEVER в Oracle SQL*Plus — управление скриптом при ошибках

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

WHENEVER — это команда, используемая в Oracle SQL*Plus, а не в самом SQL. Она позволяет задать, что делать при возникновении ошибки: завершить скрипт, перейти к следующей команде, прервать выполнение и т.д. Это очень важно при написании автоматических SQL-скриптов, особенно в CI/CD, миграциях и админ-задачах.


🔤 Написание

sql
WHENEVER [SQLERROR | OSERROR] [EXIT | CONTINUE] [SUCCESS | FAILURE | n]

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

  • Обработка ошибок в SQL*Plus

  • Защита автоматизированных сценариев

  • Управление поведением при сбоях в DDL/DML

  • Тестирование и отладка

  • Сценарии установки и миграции БД


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

1️⃣ Прервать скрипт при любой SQL-ошибке

sql
WHENEVER SQLERROR EXIT SQL.SQLCODE

Завершает выполнение скрипта, возвращая код ошибки операционной системе.


2️⃣ Продолжить выполнение скрипта при SQL-ошибке

sql
WHENEVER SQLERROR CONTINUE

3️⃣ Завершить скрипт при ошибке операционной системы

sql
WHENEVER OSERROR EXIT 1

4️⃣ Включение управления и INSERT с ошибкой

sql

WHENEVER SQLERROR EXIT FAILURE

INSERT INTO employees (employee_id) VALUES (NULL); — вызовет ошибку NOT NULL


5️⃣ Обработка в install.sql сценариях

sql
-- В начале install.sql:
WHENEVER SQLERROR EXIT SQL.SQLCODE
— дальше идёт создание таблиц, пакетов, данных

6️⃣ Возврат пользовательского кода ошибки

sql
WHENEVER SQLERROR EXIT 99

7️⃣ Продолжение после OSERROR

sql
WHENEVER OSERROR CONTINUE

8️⃣ Обработка с вызовом shell-скрипта

bash
sqlplus user/pass@db @myscript.sql
echo $? # возвращает код, установленный командой EXIT

9️⃣ Сброс поведения (удаление директивы)

В SQL*Plus нет прямой команды UNSET, но можно перезаписать:

sql
WHENEVER SQLERROR CONTINUE

🔟 Проверка текущего поведения

sql
-- Явно нельзя прочитать, но логика скрипта зависит от настроенной директивы.
-- Лучше комментировать каждую директиву явно.

🧩 WHENEVER в Oracle SQL. Заключение

WHENEVER — незаменимая директива для надежного и контролируемого исполнения SQL-скриптов в SQL*Plus. Она позволяет правильно реагировать на ошибки и предотвращать частичные изменения данных или некорректную установку БД.

💡 Запомни:

  • Только для SQL*Plus (не работает в SQL Developer или PL/SQL)

  • Управляет реакцией на SQL- и OS-ошибки

  • Часто применяется в миграциях, CI/CD, автоинсталляциях

  • Используется в начале скриптов


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

WAIT в Oracle SQL — как управлять ожиданием блокировок и поведения


 

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