Контроль целостности типов документов

Материал из GedeminWiki
Версия от 13:43, 11 января 2018; SYSDBA (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Приведенный ниже код создает для каждой таблицы документа триггер, который проверяет соответствие этой таблицы типу документа из поля GD_DOCUMENT.DOCUMENTTYPEKEY:

EXECUTE BLOCK
AS
  DECLARE VARIABLE stmt VARCHAR(2048);
  DECLARE VARIABLE id INTEGER;
  DECLARE VARIABLE relname VARCHAR(1024);
  DECLARE VARIABLE KEYS VARCHAR(1024);
BEGIN
  FOR
    SELECT
      hr.id,
      hr.relationname,
      LIST(dt.id)
    FROM
      gd_documenttype dt
      JOIN at_relations hr ON hr.id = dt.HEADERRELKEY
    GROUP BY
      1, 2
    INTO
      :id, :relname, :KEYS
  DO BEGIN
    stmt =
      'CREATE OR ALTER TRIGGER gd_check_dt_' || :id || ' FOR ' || :relname ||
      '  ACTIVE ' ||
      '  AFTER INSERT OR UPDATE ' ||
      '  POSITION 32000 ' ||
      'AS ' ||
      '  DECLARE VARIABLE dtkey INTEGER = NULL; ' ||
      'BEGIN ' ||
      '  SELECT documenttypekey FROM gd_document WHERE id = NEW.documentkey INTO :dtkey;' ||
      '  IF (NOT (:dtkey IN (' || :KEYS || '))) THEN ' ||
      '    EXCEPTION gd_e_exception ''Document type doesn`t match table ' || :relname || ''';' ||
      'END';
    EXECUTE STATEMENT :stmt WITH AUTONOMOUS TRANSACTION;
  END
END
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты