Обработка ошибок SQL


Процедуры могут также обрабатывать ошибки SQL по кодам, воз­вращенным в SQLCODE. После выполнения каждой команды SQL фор­мируется код ее завершения - SQLCODE, отражающий успешность вы­полнения, или код ошибки. SQLCODE может также содержать код пре­дупреждения, типа того, что перечень строк в выборке по циклу FOR SELECT исчерпан.

Коды завершения команд SQL

SQLCODE Описание
Успешное завершение
1-99 Предупреждение или информационное сообщение
Конец файла (списка)
<0 Ошибка. Команда не выполнена

Пример:

WHEN SQLCODE -803

/*Попытка добавить строку со значением первичного ключа,

которое уже есть в таблице */

DO

BEGIN

Обработка ошибок InterBase

Процедуры могут обрабатывать ошибки InterBase по кодам, возвра­щенным в GDSCODE. Например, если команда в процедуре пытается модифицировать строку, уже модифицированную другой, еще не завер­шенной, транзакцией, то в этом случае процедура могла бы получать код ошибки InterBase, isc_lock_conflict. При повторении попытки ее моди­фикации, другая транзакция может выполнить откат, сняв, таким образом, блокировку, что позволит успешно завершить команду. Используя инст­рукцию WHEN GDSCODE, процедура может обрабатывать ошибки кон­фликта блокировки и повторять его операцию.

В качестве примера рассмотрим фрагмент хранимой процедуры с воз­вращаемым параметром RETCODE, который устанавливается в 0 при нор­мальном выполнении процедуры и в 1 при возникновении каких либо ошибок

Пример:

BEGIN

RETCODE=0;

WHEN ANY DO

BEGIN

RETCODE=1;

EXIT;

END

END

Команды создания, удаления и модифиации триггеров

Создание триггеров

синтаксис команды:

CREATE TRIGGER <имя_триггера> FOR {ТАБЛИЦА | ОБЗОР}

{ACTIVE | INACTIVE}

{BEFORE | AFTER} {DELETE | INSERT | UPDATE}

[POSITION number]

AS

<тело триггера>

Синтаксические конструкции команды CREATE TRIGGER

Параметр Описание
Имя_триггера Задает имя триггера
Таблица | обзор Имя таблицы или обзора, для которх создается триггер
ACTIVE | INACTIVE Необязательная конструкция. определяет активность триггера. ACTIVE - триггер включен, INACTIVE – триггер отключен.
BEFORE | AFTER Обязательный. Определяет, когда включается триггер. BEFORE – перед операцией, выполняемой над таблицей, AFTER – после операции, выполняемой над таблицей.
DELETE | INSERT | UPDATE Указывает, при выполнении какой именно операции, будет включаться триггер.
POSITION number Задает порядок, в котором будут выполняться триггеры (с одной таблицей и с одними и теми же включениями может быть связано несколько триггеров). Number должен быть целым числом между 0 и 32767 включительно. включение триггеров происходит в порядке возрастания номеров. Если триггеры имеют один и тот же номер, то они будут вклчаться в алфавитном порядке их имен.
тело триггера Состоит из двух частей: 1) DECLARE VARIABLE <имя переменной> <тип_данных>; - объявляет локальные переменные, используемые только в триггере. 2) непосредственно тело триггера как последовательный набор операций, заключенный в операторные скобки

Рассмотрим примеры.

Пример 1. Триггер для контроля добавления данных в таблицу студент.

CREATE TRIGGER I_1

FOR STUDENT

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

IF (NEW.SURNAME IS NULL) THEN EXCEPTION NO_USER;

IF (NEW.NAME IS NULL) THEN NEW.NAME = "ИМЯ";

END

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

CREATE TRIGGER I_2

FOR STUDENT

ACTIVE BEFORE INSERT POSITION 1

AS

BEGIN

IF (NEW.UNIV_ID >0) THEN

IF (NOT EXISTS (SELECT * FROM UNIVERSITY

WHERE (UNIV_ID = NEW.UNIV_ID))) THEN EXCEPTION NO_UNIV;

END



Дата добавления: 2022-02-05; просмотров: 237;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.