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

Тема 2.11 Использование генераторов.

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

  1. формирование уникального значения пользователем по определенному алгоритму (например номер лицевого счета в банке);

  2. выработка уникального значения сервером базы данных.

Для установки уникальных значений столбцов в InterBase используется аппарат генератора.

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

Для создания генератора используется следующий оператор:

CREATE GENERATOR <имя генератора>

Установка стартового значения:

SET GENERATOR <имя генератора> TO <стартовое значение>

Для получения уникального значения используется функция:

GEN_ID (ИмяГенератора, шаг)

Не рекомендуется переустанавливать стартовое значение генератора или менять шаг при разных обращениях к функции GEN_ID. В этих случаях генератор может выдать не уникальное значение и как следствие будет возбуждено исключение при попытке запоминания новой записи в таблице базы данных.

Примеры:

1.Пусть в БД определен генератор для столбца N_Rashod в таблице RASHOD:

CREATE GENERATOR RAS_G;

SET GENERATOR RAS_S TO 0;

Обращение к генератору непосредственно из оператора INSERT:

INSERT INTO RASHOD (N_RASH, DATE_RASH, KOLVO, TOVAR, POKUP)

VALUES (GEN_ID (RAS_G, 1),”10-JAN-2000”,100,”Cахар”, ”ООО Ромашка”)

2.Присваивание ключевому столбцу уникального значения может быть реализовано с помощью триггера, вызываемого перед запоминанием новой записи в БД:

CREATE TRIGGER BI_RAS FOR RASHOD

ACTIVE

BEFORE INSERT

AS

BEGIN

NEW.RAS = GEN_ID (RAS_G, 1)

END

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

INSERT INTO RASHOD (N_RASH, DATE_RASH, KOLVO, TOVAR, POKUP)

VALUES (:DATE_RASH, :KOLVO, :TOVAR, :POKUP)

Пример хранимой процедуры, которую можно использовать для генерирования значений:

CREATE PROCEDURE GET_RAS

RETURNS (NR INTEGER)

AS

BEGIN

NR=GEN_ID (RAS_G, 1)

SUSPEND

END

При добавлении новой записи в таблицу в клиентском приложении вызов этой процедуры реализуется при помощи компонента TStoredProc в обработчиках OnNewRecord и AfterInsert.