А как это у Вас реализовано?

например так:

код вида

create table DOC$ITEMS(         -- Экземпляры документов
ID ZLS$PK,                      -- Первичный ключ
ID_K ZLS$FK,                    -- Вид документа
NAME ZLS$NAME,                  -- Идентификатор документа
COMMENT ZLS$COMMENT,            -- Примечание
XML DOC$XML,                    -- Исходный текст документа
constraint DOC$ITEMS            -- Первичный ключ
  primary key (ID),
constraint DOC$ITEMS_NAME       -- Уникальное имя документа одного типа
  unique (ID_K, NAME),
constraint DOC$ITEMS_K          -- Вид документа
  foreign key (ID_K)
  references DOC$KINDS(ID)
  on delete cascade
)^

превращается в:

/* D:\zls\sql\doc\tables\items.sql */
create table DOC$ITEMS(
ID ZLS$PK,
ID_K ZLS$FK,
NAME ZLS$NAME,
COMMENT ZLS$COMMENT,
XML DOC$XML,
constraint DOC$ITEMS
  primary key (ID),
constraint DOC$ITEMS_NAME
  unique (ID_K, NAME),
constraint DOC$ITEMS_K
  foreign key (ID_K)
  references DOC$KINDS(ID)
  on delete cascade
)
^
commit^
comment on table DOC$ITEMS is 'Экземпляры документов'^
commit^
comment on column DOC$ITEMS.ID is 'Первичный ключ'^
commit^
comment on column DOC$ITEMS.ID_K is 'Вид документа'^
commit^
comment on column DOC$ITEMS.NAME is 'Идентификатор документа'^
commit^
comment on column DOC$ITEMS.COMMENT is 'Примечание'^
commit^
comment on column DOC$ITEMS.XML is 'Исходный текст документа'^
commit^
comment on index DOC$ITEMS is 'Первичный ключ'^
commit^
comment on index DOC$ITEMS_NAME is 'Уникальное имя документа одного типа'^
commit^
comment on index DOC$ITEMS_K is 'Вид документа'^
create generator DOC$ITEMS
^
set generator DOC$ITEMS to 0
^
commit
^
create trigger DOC$ITEMS_ID for DOC$ITEMS -- Проверка первичного ключа
before insert or update or delete
position 0 as
begin
if (INSERTING)
   then begin
           if (NEW.ID is null) then NEW.ID =  GEN_ID( DOC$ITEMS,  1);
           end
   else if ( (OLD.ID = 0 and DELETING) or ( (OLD.ID < 0) and
               (UPDATING or DELETING) ) )
               then exception ZLS$BUILD_IN_PARAMETER;
end
^
commit^
comment on trigger DOC$ITEMS_ID is 'Проверка первичного ключа'^
insert into ZLS$TRANSFER(ID, ORDER_NUMBER, TABLE_NAME)
values (GEN_ID(ZLS$TRANSFER,1), GEN_ID(ZLS$TRANSFER,0), 'DOC$ITEMS')

GRANT ALL ON DOC$ITEMS TO TRIGGER DOC$ITEMS_ID ^
set generator DOC$ITEMS to 1000 ^

--
Булычев Алексей
http://www.stella-npf.ru

Ответить