Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
60.doc
Скачиваний:
3
Добавлен:
19.09.2019
Размер:
86.02 Кб
Скачать

60.. Генераторы и триггеры в базах данных. Условия активизации триггеров. Префиксы new и old.

Генераторами называется специальная область данных, которая хранится в базе данных и содержит какое то целое число. Генераторы- это счетчики, но в отличие от локальных БД, увеличение значения этих счетчиков осуществляется с помощью триггеров.

Создаются генераторы с помощью оператора CREATE GENERATOR:

CREATE GENERATOR Gen1;

Триггерами называются подпрограммы, которые всегда выполняются автоматически на стороне сервера, в ответ на изменение данных в таблицах БД.

Синтаксис определения триггера следующий:

CREATE TRIGGER <имя_триггера> FOR <имя_таблицы>

[ACTIVE | INACTIVE]

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

[POSITION <число>]

AS

[DECLARE [VARIABLE] <переменная тип_данных>;]

BEGIN

<операторы_триггера>

END

В зависимости от времени наступления события, используется определенное имя ссылки на запись на которой сработал триггер (если можна так выразиться). Зависит от условия активации триггера: для BEFORE указываемOLD, а для AFTER - NEW

Префиксы new и old.

Эти префиксы объявлять не нужно, они уже присутствуют в каждом триггере. Соответственно, переменные хранят старое и новое значения какого либо поля. Обращаться к этим значениям можно так:

NEW.<имя_поля>

Эти префиксы могут быть использованы для:

  • Получения допустимых значений по умолчанию.

  • Проверки входных данных, и при необходимости, их изменения.

  • Получения значений полей для модификации других таблиц.

  • Реализации автоинкрементных полей.

59. Хранимые процедуры в субд FireBird. Виды хранимых процедур. Привести примеры. Различие переменных памяти и полей таблиц в хранимых процедурах.

Используя язык PSQL (процедурный язык SQL) Firebird, возможно создавать сложные хранимые процедуры для обработки данных полностью на стороне сервера. Для генерации отчётов особенно удобны хранимые процедуры с возможностью выборки, возвращающие данные в виде набора записей.

В FireBird имеется несколько типов хранимых процедур.

  • Системные хранимые процедуры предназначены для выполнения различных административных действий. Практически все действия по администрированию сервера выполняются с их помощью. Системные хранимые процедуры имеют префикс sp_, хранятся в системной базе данных и могут быть вызваны в контексте любой другой базы данных.

  • Пользовательские хранимые процедуры реализуют те или иные действия. Хранимые процедуры – полноценный объект базы данных. Вследствие этого каждая хранимая процедура располагается в конкретной базе данных, где и выполняется.

  • Временные хранимые процедуры существуют лишь некоторое время, после чего автоматически уничтожаются сервером. Они делятся на локальные и глобальные. Локальные временные хранимые процедуры могут быть вызваны только из того соединения, в котором созданы. Глобальные временные хранимые процедуры доступны для любых соединений сервера, на котором имеется такая же процедура

. CREATE PROCEDURE NewOrder @cust_id CHAR(IO)  AS  - - Объявление переменной для номера заказа  DECLARE @order_num INTEGER  -- Получение текущего наибольшего номера заказа  SELECT  @order_num=MAX (order_num)  FROM Orders  Determine next order number  SELECT @order_num=@order_num+l  -- Добавление нового заказа  INSERT INTO Orders(order_num, order_date, cust_id)  VALUES(®order_num, GETDATEO, @cust_id)  -- Возвращение номера заказа  RETURN ©order num;

      Эта хранимая процедура создает новый заказ в таблице Orders. Она принимает один параметр — идентификатор клиента, сделавшего заказ. Два других столбца таблицы, номер и дата заказа, генерируются автоматически в самой хранимой процедуре. Вначале в коде объявляется локальная переменная для хранения номера заказа. Затем выбирается текущий наибольший номер заказа (посредством функции МАХ ()) и увеличивается на единицу (с помощью оператора SELECT). После этого добавляется заказ посредством оператора INSERT с использованием только что сгенерированного номера заказа, выбирается текущая системная дата (с помощью функции GETDATE ()) и передается идентификатор клиента. Наконец, номер заказа (необходимый для обработки предметов заказа) возвращается как RETURN @order_num. Отметим, что код снабжен комментариями, это всегда следует делать при написании хранимых процедур.

В отличие от полей таблиц, нам не нужно заранее определять тип используемых переменных. Дело в том, что переменные имеют “слабую типизацию”. Это означает, что при определенных условиях одна и та же переменная может использовать данные различных типов.

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