×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

5.6.9. Ошибки и сообщения

5.6.9.1. Вывод ошибок и сообщений
5.6.9.2. Проверка утверждений

5.6.9.1. Вывод ошибок и сообщений #

Для вывода сообщений и формирования ошибок используется оператор RAISE statement to report messages and raise errors.

RAISE [ level ] 'format' [, expression [, ... ]] [ USING option = expression [, ... ] ];
RAISE [ level ] condition_name [ USING option = expression [, ... ] ];
RAISE [ level ] SQLSTATE 'sqlstate' [ USING option = expression [, ... ] ];
RAISE [ level ] USING option = expression [, ... ];
RAISE ;

Параметр level определяет уровень серьезности ошибки. Допустимыми уровнями являются DEBUG, LOG, INFO, NOTICE, WARNING, и EXCEPTION, причем EXCEPTION используется по умолчанию. EXCEPTION генерирует ошибку (которая обычно прерывает текущую транзакцию); на других уровнях только создаются сообщения с различными приоритетами. Выводятся ли сообщения определенного приоритета клиенту, записываются ли они в журнал сервера или выполняется и то, и другое, определяется log_min_messages и client_min_messages конфигурационными переменными. См. Глава 3.4 для получения дополнительной информации.

После level если они есть, можно указать format строку (которая должна быть простым строковым литералом, а не выражением). Форматная строка определяет текст выводимого сообщения об ошибке. За форматной строкой могут следовать необязательные выражения аргументов, вставляемые в сообщение. Внутри форматной строки % заменяется строковым представлением значения следующего необязательного аргумента. Для вывода %% литерала %. Количество аргументов должно соответствовать количеству % заполнителей в строке формата, иначе при компиляции функции возникнет ошибка.

В данном примере значение v_job_id заменит % в строке:

RAISE NOTICE 'Calling cs_create_job(%)', v_job_id;

К отчету об ошибке можно добавить дополнительную информацию, указав USING после чего следуют option = expression элементы. Каждый параметр expression может быть любым строковым выражением. Допустимыми option ключевыми словами являются:

MESSAGE #

Задает текст сообщения об ошибке. Данный параметр нельзя использовать в форме RAISE которая содержит строку форматирования перед USING.

DETAIL #

Позволяет указать подробное сообщение об ошибке.

HINT #

Позволяет указать текст подсказки.

ERRCODE #

Определяет код ошибки (SQLSTATE), о которой необходимо сообщить, либо по имени условия , как показано в Приложение 8.1, либо непосредственно в виде пятисимвольного кода SQLSTATE.

COLUMN
CONSTRAINT
DATATYPE
TABLE
SCHEMA #

Позволяет указать имя связанного объекта.

Данный пример прерывает транзакцию с выводом заданного сообщения об ошибке и подсказки:

RAISE EXCEPTION 'Nonexistent ID --> %', user_id
      USING HINT = 'Please check your user ID';

В этих двух примерах показаны эквивалентные способы задания кода SQLSTATE:

RAISE 'Duplicate user ID: %', user_id USING ERRCODE = 'unique_violation';
RAISE 'Duplicate user ID: %', user_id USING ERRCODE = '23505';

Существует второй RAISE синтаксис, в котором основным аргументом является имя условия или код SQLSTATE, о котором требуется сообщить, например:

RAISE division_by_zero;
RAISE SQLSTATE '22012';

В данном синтаксисе USING можно использовать для вывода произвольного сообщения об ошибке, подробностей (detail) или подсказки (hint). Предыдущий пример можно также реализовать следующим образом:

RAISE unique_violation USING MESSAGE = 'Duplicate user ID: ' || user_id;

Еще один вариант записи — использовать RAISE USING или RAISE level USING и указать все остальное в списке USING список.

Последний вариант команды RAISE не имеет параметров вовсе. Эта форма может применяться только внутри BEGIN блока EXCEPTION конструкция; она вызывает повторную генерацию текущей обрабатываемой ошибки.

Примечание

До версии Digital Q.DataBase 9.1, RAISE без параметров интерпретировалась как повторная генерация ошибки из блока, содержащего активный обработчик исключений. Таким образом, EXCEPTION конструкция, вложенная в данный обработчик, не могла перехватить её, даже если RAISE находилась внутри вложенного EXCEPTION блока конструкции. Такое поведение считалось неочевидным, а также несовместимым с Oracle PL/SQL.

Если в команде RAISE EXCEPTION не указано ни имя условия, ни SQLSTATE, по умолчанию используется raise_exception (P0001). Если текст сообщения не указан, по умолчанию в качестве текста сообщения используется имя условия или SQLSTATE.

Примечание

При указании кода ошибки через SQLSTATE можно использовать не только предопределенные коды, но и выбирать любой код, состоящий из пяти цифр и/или заглавных латинских букв (ASCII), отличный от 00000. Рекомендуется избегать использования кодов ошибок, заканчивающихся тремя нулями, так как они являются кодами категорий и могут быть перехвачены только путем перехвата всей категории.

5.6.9.2. Проверка утверждений #

Синтаксис ASSERT оператор является удобным сокращенным способом вставки отладочных проверок в PL/pgSQL функции.

ASSERT condition [ , сообщение ];

Параметр condition представляет собой логическое выражение, которое всегда должно возвращать значение true; если это условие соблюдается, то ASSERT оператор больше ничего не выполняет. Если результат ложен (false) или равен null, то генерируется ASSERT_FAILURE генерируется исключение. (Если при вычислении condition, она регистрируется как обычная ошибка.)

Если указан необязательный параметр сообщение , то он представляет собой выражение, результат которого (если он не равен null) заменяет стандартный текст сообщения об ошибке «утверждение не выполнено», должен ли condition не выполнится. Выражение сообщение выражение не вычисляется в обычном случае, когда утверждение выполняется успешно.

Проверку утверждений можно включить или отключить с помощью параметра конфигурации plpgsql.check_asserts, который принимает логическое значение; значение по умолчанию — on. Если для данного параметра установлено значение off то ASSERT операторы не выполняют никаких действий.

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

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению