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

Функции

Оператор function объявляет подпрограмму (функцию). В отличие от оператора create procedure оператор function только описывает функцию, а не создаёт её как объект базы данных. Объявление функции может располагаться только внутри тела хранимой процедуры или триггера. Объявление функции должно быть до первого её использования. Вложенные объявления функции не допускаются.

Внутри функции могут быть объявлены переменные. Их имена не должны совпадать с именами параметров функции. Все переменные, которые будут объявлены внутри функции, будут доступны только внутри этой функции. Имена объявляемых переменных могут совпадать с глобальными переменными, в этом случае глобальные переменные не будут доступны из функции.

Все функции должны возвращать некоторое значение. Возвращаемое значение задаётся оператором return. Если возвращаемое значение не указано или оператор return не встретился при выполнении функции, то функция возвращает число 0. Вызывающая функция вправе проигнорировать возвращаемое значение.

Формат:

function Имя_функции ( [ Параметр , ...] )   { Тело_функции; }

Аргументы:

Аргумент

Значение

Имя_функции

Задает имя функции. Имя функции должно содержать буквы и цифры, должно начинаться с буквы и должно быть не длиннее 31 символа. Имена процедур должны быть уникальными внутри процедуры (внутри триггера) и не должны совпадать с зарезервированными словами.

Параметры

Необязательная конструкция, которая задает имена параметров и тип вызова. Все параметры должны иметь уникальные имена. Конструкция inout используется для выходных параметров и задает вызов по ссылке. Конструкция inout эквивалентна конструкции out и также задает вызов по ссылке. Максимальное количество параметров функции – 31.

Тело_функции

Тело функции описывает те действия, которые необходимо выполнить при вызове функции.

Пример:

// вывести на консоль содержимое массива // с указанием номера элемента

create procedure scOutlist() as {   var @i, @arr[5];   @arr[0] = '5';   @arr[1] = '4';   @arr[2] = '3';   @arr[3] = '2';   @arr[4] = '1';

  // вывод на консоль

  function Out(s, n)   {     ? char(n + 1) + ' -> ' + s;   }

  for(@i = 0; @i < 5; @i = @i + 1 )   {     Out( char(arr[@i]), @i);   } }

4.6 Триггеры Создание триггера

SQL оператор create trigger создает новый триггер, который сохраняется на сервере. Оператор create trigger состоит из заголовка, который задает характеристики триггера, и тела, которое содержит описание тех действий, которые надо выполнить при срабатывании триггера.

Формат:

create trigger Имя_триггера on Имя_таблицы   { after | before } { insert | update | delete }   [ position Позиция ]   [ user { current | default } ]   [ for each { row | statement } ] as   [ Определение_локальных_переменных... ] begin   {Тело_триггера;} end;

Определение_локальных_переменных ::=   declare variable Имя_переменной [ = Выражение ] , ... ;

Аргументы:

Аргумент

Значение

Имя_триггера

Задает имя триггера. Имя триггера должно содержать буквы и цифры, должно начинаться с буквы и должно быть не длиннее 31 символа. Имена триггеров должны быть уникальными и не должны совпадать с зарезервированными словами.

Тело триггера

Тело триггера описывает те действия, которые необходимо выполнить при вызове триггера.

user current

Необязательный параметр, который задает права, которые будут использоваться внутри триггера. Если задана конструкция user current, то внутри триггера действуют права пользователя, который создал триггер.

user default

Необязательный параметр, который задает права, которые будут использоваться внутри триггера. Если задана конструкция user default, то внутри триггера будут действовать права, действовавшие до вызова триггера.

after

Обязательный параметр, который задает момент срабатывания триггера. Если задана конструкция after, то триггер срабатывает после выполнения операции.

before

Обязательный параметр, который задает момент срабатывания триггера. Если задана конструкция before, то триггер срабатывает до выполнения операции и может ее отменить.

for each row

Необязательный параметр, который определяет момент срабатывания триггера. Если задана конструкция for each row, то триггер срабатывает для каждой обрабатываемой записи.

for each statement

Необязательный параметр, который определяет момент срабатывания триггера. Если задана конструкция for each statement, то триггер срабатывает один раз.

position число

Необязательный параметр, который определяет порядок срабатывания триггеров. Число должно быть в диапазоне от 0 до 32767. Чем меньше позиция триггера, тем раньше он сработает. Триггеры с одинаковой позицией срабатывают в произвольном порядке. Если позиция триггера не задана, то у него будет позиция 0.

Определение_локальных_переменных

См. подробнее в разделе «Переменные».

Пример:

Создать триггер tadBOOK, который будет протоколировать удаляемые из таблицы BOOK записи.

create trigger tadBOOK on BOOK   after delete for each row as begin   insert into table LOG (DATE , USER , RID)   values (today (), session_user, BOOK.ID) ; end;