Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KL_2010_14.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
28.97 Mб
Скачать

6.1.8.Обработка ошибок и исключений

Команда RAISE предназначена для инициирования ошибок и исключений в функциях PL/pgSQL. Она передает заданную информацию механизму PostgreSQL elog (стандартное средство ведения протокола ошибок  данные обычно направляются в файл /var/log/messages или $PGDATA/serverlog с одновременным выводом в поток stderr).

В команде RAISE также указывается уровень ошибки и строка, передаваемая PostgreSQL. Кроме того, в команду можно включить переменные и выражения, значения которых будут содержаться в выходных данных. Соответствующие позиции строки помечаются знаками процента (%). Синтаксис команды RAISE: RAISE уровень ''сообщение'' [. идентификатор [...] ]:

В таблице 6.1 приведены три допустимые значения уровня ошибки с краткими описани­ями.

Таблица 6.1. Допустимые значения уровня ошибки

Значение

Описание

DEBUG

Команда уровня DEBUG направляет заданный текст в виде сообщения DEBUG: в журнал PostgreSQL и клиентской программе, если клиент подключен к кластеру базы данных, работающему в отладочном режиме. Команды RAISE уровня DEBUG игнорируются базами данных, работающими в режиме реальной эксплуатации

NOTICE

Команда уровня NOTICE направляет заданный текст в виде сообщения NOTICE: в журнал PostgreSQL и клиентской программе. Сообщение передается в любом режиме работы PostgreSQL

EXCEPTION

Команда уровня EXCEPTION направляет заданный текст в виде сообщения ERROR: в журнал PostgreSQL и клиентской программе. Ошибка уровня EXCEPTION также вызывает откат текущей транзакции

В листинге 6.41 первая команда RAISE выводит отладочное сообщение, а вторая и третья команды выводят сообщение для пользователя. Обратите внимание на знак % в третьей команде  он отмечает позицию, в которой выводится значение an_integer. Наконец, четвертая команда RAISE выводит сообщение об ошибке и инициирует исключение, приводящее к отмене транзакции.

Листинг 6.41. Команда RAISE

CREATE FUNCTION raise_test () RETURNS integer AS '

DECLARE

-- Объявление целочисленной переменной для тестового вывода.

an_integer integer = 1;

BEGIN

-- Вывести отладочное сообщение уровня

DEBUG.RAISE DEBUG "The raise_test() function began.";

an_integer = an_integer * 1;

-- Вывести сообщение об изменении переменной an_integer,

-- а затем вывести другое сообщение с ее новым значением.

RAISE NOTICE "Variable an_integer was cnanged.";

RAISE NOTICE "Variable an_integer's value is now £." an_integer;

-- Инициировать исключение.

RAISE EXCEPTION "Variable % cnanged. Transaction aborted. ", an_integer;

RETURN 1;

END;

' LANGUAGE 'plpgsql';

В листинге 6.42 приведены результаты, полученные при вызове функции raise_test() из базы данных booktown. Отладочное сообщение DEBUG отсутствует, поскольку база данных работает не в отладочном режиме.

Листинг 6.42. Результаты вызова raise_test()

booktown=# SELECT raise_test();

NOTICE: Variable anjnteger was changed.

NOTICE: Variable anjnteger's value is now 2.

ERROR: Variable 2 changed. Aborting transaction.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]