Обработка ошибок 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; просмотров: 232;