INTERBASE

Создание генераторов в test

            Так как в базах Interbase нет автоинкрементальных полей. Вместо них с той же целью используются генераторы. И располагаются они в разделе «Generators»  дерева сервера.

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

            Для создания генераторов можно воспользоваться утилитой «Interactive SQL», которая вызывается из «IBConsole» в главном меню, в разделе «ToolsInteractive 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»


База данных предприятий Братск (5857 адресов)
База данных предприятий Братск (5857 адресов)


База данных предприятий Архангельск (9408 адресов)
База данных предприятий Архангельск (9408 адресов)


База предприятий России, стран СНГ 2013
База предприятий России, стран СНГ 2013