В начало
Создание генераторов в test
Так как в базах Interbase нет автоинкрементальных полей. Вместо них с той же целью
используются генераторы. И располагаются они в разделе «Generators» дерева сервера.
Генератор – это хранящаяся в базе
данных программа, выдающая при каждом обращении к ней уникальное число. Для
каждого автоинкрементного поля в базе данных создается свой генератор.
Для создания генераторов можно
воспользоваться утилитой «Interactive SQL»,
которая вызывается из «IBConsole»
в главном меню, в разделе «Tools
– Interactive SQL…».
Итак,
создадим для базы «test»
несколько генераторов и установим для них начальные значения, т.е. установим их
в «0».
CREATE GENERATOR GEN_CAR;
SET
GENERATOR GEN_CAR TO 0;
commit;
|
CREATE
GENERATOR GEN_CLIENT;
SET
GENERATOR GEN_CLIENT TO 0;
commit;
|
CREATE
GENERATOR GEN_GRAFWORK;
SET
GENERATOR GEN_GRAFWORK TO 0;
commit;
|
CREATE
GENERATOR GEN_OPERATION;
SET
GENERATOR GEN_OPERATION TO 0;
commit;
|
CREATE
GENERATOR GEN_PERSONAL;
SET
GENERATOR GEN_PERSONAL TO 0;
commit;
|
CREATE GENERATOR
GEN_SERVICE;
SET
GENERATOR GEN_SERVICE TO 0;
commit;
|
CREATE
GENERATOR GEN_TSERVICE;
SET
GENERATOR GEN_TSERVICE TO 0;
commit;
|
В принципе установка в «0» мне кажется не особо нужна, т.к. при создании нового генератора
его значение и так обнуляется.
Таким
образом были созданы семь генераторов, по одному на
имеющуюся в базе «test»
таблицу.
Рис.
1. Генераторы базы «test»
Для того чтобы привязать генератор к
конкретному полю надо выполнить в утилите «Intaractive SQL» следующий код
SET TERM !!;
CREATE TRIGGER
"BEF_INS_CAR" FOR "CAR"
ACTIVE BEFORE
INSERT
AS
BEGIN
NEW.CARID = GEN_ID(GEN_CAR,1);
END!!
SET TERM ;!!
commit;
|
Также можно создать и другие
триггеры.
SET TERM !!;
CREATE TRIGGER
"BEF_INS_CLIENT" FOR
"CLIENT"
ACTIVE BEFORE
INSERT
AS
BEGIN
NEW.CLIENTID
= GEN_ID(GEN_CLIENT,1);
END!!
SET TERM ;!!
commit;
|
SET TERM !!;
CREATE
TRIGGER "BEF_INS_GRAFWORK" FOR "GRAFWORK"
ACTIVE
BEFORE INSERT
AS
BEGIN
NEW.WORKID = GEN_ID(GEN_GRAFWORK,1);
NEW.DATA = 'TODAY';
END!!
SET TERM ;!!
commit;
|
SET TERM !!;
CREATE
TRIGGER "BEF_INS_OPERATION" FOR "OPERATION"
ACTIVE
BEFORE INSERT
AS
BEGIN
NEW.OPERID = GEN_ID(GEN_OPERATION,1);
NEW.DATA = 'TODAY';
END!!
SET TERM ;!!
commit;
|
SET TERM !!;
CREATE
TRIGGER "BEF_INS_PERSONAL" FOR "PERSONAL"
ACTIVE
BEFORE INSERT
AS
BEGIN
NEW.PERSONALID = GEN_ID(GEN_PERSONAL,1);
END!!
SET TERM ;!!
commit;
|
SET TERM !!;
CREATE
TRIGGER "BEF_INS_SERVICE" FOR "SERVICE"
ACTIVE BEFORE
INSERT
AS
BEGIN
NEW.SERVICEID = GEN_ID(GEN_SERVICE,1);
END!!
SET TERM ;!!
commit;
|
SET TERM !!;
CREATE
TRIGGER "BEF_INS_TSERVICE" FOR "TSERVICE"
ACTIVE
BEFORE INSERT
AS
BEGIN
NEW.TSERVICEID = GEN_ID(GEN_TSERVICE,1);
END!!
SET TERM ;!!
commit;
|
То, что триггеры прописались, где
надо можно посмотреть в свойствах таблицы.
Рис.
2. Триггер таблицы «CAR»