Инфраструктура таблицы с идентификатором
Материал из GedeminWiki
Из системных полей таблица с идентификатором содержит:
- id — для хранения уникального идентификатора записи,
- editiondate — для хранения даты изменения и добавления записи,
- editorkey — для хранения идентификатора пользователя, который редактировал запись.
Поля заполняются триггерами, имена которых формируются по определенной схеме. В таблице ниже приведены примеры имен для таблицы из эталонной базы данных и для пользовательской таблицы.
| N | Описание объекта | Таблица RP_REPORTTEMPLATE | Таблица USR$FA_TYPE |
|---|---|---|---|
| 1 | Триггер для присвоения уникального идентификатора | RP_BI_REPORTTEMPLATE | USR$BI_USR$FA_TYPE |
| 2 | Триггер для присвоения времени и пользователя при вставке новой записи. | RP_BI_REPORTTEMPLATE5 | USR$BI_FA_TYPE5 |
| 3 | Триггер для присвоения времени и пользователя при изменении записи. | RP_BU_REPORTTEMPLATE5 | USR$BU_FA_TYPE5 |
Код триггеров раскрыт ниже на примере таблицы RP REPORTTEMPLATE:
Триггер на вставку записи (присвоение уникального ИД)
CREATE OR ALTER TRIGGER RP_BI_REPORTTEMPLATE FOR RP_REPORTTEMPLATE ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.id IS NULL) THEN NEW.id = GEN_ID(gd_g_offset, 0) + GEN_ID(gd_g_unique, 1); END
Триггер на вставку записи(присвоение времени и пользователя)
CREATE OR ALTER TRIGGER RP_BI_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE ACTIVE BEFORE INSERT POSITION 5 AS BEGIN IF (NEW.editorkey IS NULL) THEN NEW.editorkey = 650002; IF (NEW.editiondate IS NULL) THEN NEW.editiondate = CURRENT_TIMESTAMP; END
Триггер на изменение записи(присвоение времени и пользователя)
CREATE OR ALTER TRIGGER RP_BU_REPORTTEMPLATE5 FOR RP_REPORTTEMPLATE ACTIVE BEFORE UPDATE POSITION 5 AS BEGIN IF (NEW.editorkey IS NULL) THEN NEW.editorkey = 650002; IF (NEW.editiondate IS NULL) THEN NEW.editiondate = CURRENT_TIMESTAMP; END