Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Работа с триггерами Использование в триггерах переменных old и new

В теле триггера можно использовать две специальные переменные, new и old. Переменная old ссылается на старое значение столбца текущей строки. Переменная new ссылается на новое значение столбца текущей строки.

Формат:

new.Имя_столбца или old.Имя_столбца

где:

Имя_столбца

Имя столбца таблицы, для которой сработал триггер.

Новое значение для строки можно менять, но только в триггере, который выполняется до самой операции (режим before). Триггер, который срабатывает после операции insert или update и который пытается присвоить значение new.XXX, ничего не сделает.

Пример:

create trigger tbiRDBOOK on RDBOOK   before insert for each row {   new.COMMENT =     'Выданная книга находится в отличном состоянии '; };

Проверка ошибок триггера

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

Вставить запись в таблицу, проверив ошибку триггера.

create trigger tbiREADER on READER   before insert position 2 for each row begin   if( new.DEPOSIT < 150 )   {     // ошибка появится, если внесенная сумма залога     // меньше 150 рублей     htSetError(-8001);   } end; // начать транзакцию на таблице reader begin work T1 table READER; // вставить ошибочные данные insert into READER(FNAME, LNAME, RNUM, DEPOSIT) values('Василий','Демидович', 'Д123', 15); var @rc = lastsqlerr(); // проверяем на наличие ошибки в триггере if(@rc >= -8999 and @rc <= -8000) {   ? 'Ошибка триггера ' + @rc + '\n';   rollback work T1; } else {   commit work T1; }

Код ошибки, который возвращается триггером, можно проверить после выполнения операции с помощью функции lastsqlerr. Код ошибки из триггера преобразуется в коды ошибки по следующим правилам:

  • Коды в диапазоне от -8000 до -8999 не изменяются;

  • Коды в диапазоне от 1 до 999 преобразуются в коды от -8001 до -8999;

  • Коды в диапазоне от -1 до -999 преобразуются в коды от -8001 до -8999;

  • Остальные коды преобразуются в код -10 (Операция запрещена).

4.8 Встроенные sql функции Функции преобразования

Часть функций рассматривается подробно в соответствующих разделах данной темы и в других темах. Здесь мы только перечислим группы встроенных функций и дадим краткую их характеристику. Для получения подробного описания функции следует обратиться к документации HyTech.

Функции преобразования

array

Преобразование к типу «байтовый массив».

byte

Преобразование к типу байта.

c2a

Преобразование строки символов в массив.

char

Преобразование к символьному типу.

char2date

Преобразование строки в дату.

currency

Преобразование к типу «деньги».

date

Преобразование к типу «дата».

double

Преобразование к плавающему числу с двойной точностью.

dword

Преобразование к типу целого числа без знака (4 байта).

float

Преобразование к плавающему числу.

int

Преобразование к типу целого числа со знаком (2 байта).

long

Преобразование к типу целого числа со знаком (4 байта).

number

Преобразование к типу целого числа без знака (3 байта).

size

Определение размера значения выражения в байтах.

typeexpr

Определение типа выражения.

word

Преобразование к типу целого числа без знака (2 байта).