CftClub.ru
Клуб специалистов ЦФТ-Банк

Триггеры и журналирование

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Ноя 02, 2016 14:37   Триггеры и журналирование Ответить с цитатой
Полезность: Нет оценки
Добрый день!

Возник тут вопрос. Может кто из местных гуров, просвятит незадачливого меня.

Почему ЦФТ придумало какую то мутную концепцию "журналирования реквизитов" ? А не использует запись истории значений через триггеры?

Еще, если вдруг есть пример где все таки через триггер история пишется, просьба кинуть ссылку, в каком ТБП.
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Ноя 02, 2016 14:51    Ответить с цитатой
Полезность: Нет оценки
Так они вроде через триггер и пишутся. Или что-то новое появилось?
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеСр Ноя 02, 2016 15:01   Re: Триггеры и журналирование Ответить с цитатой
Полезность: 1
vtar пишет:
Добрый день!

Возник тут вопрос. Может кто из местных гуров, просвятит незадачливого меня.

Почему ЦФТ придумало какую то мутную концепцию "журналирования реквизитов" ? А не использует запись истории значений через триггеры?

Еще, если вдруг есть пример где все таки через триггер история пишется, просьба кинуть ссылку, в каком ТБП.


Для примера возьмем PRODUCT
Журналирование для
C_DATE_CLOSE
C_COM_STATUS

Смотрим триггеры
Цитата:
LOG_Z#PRODUCT


Код:

DECLARE c varchar2(16);
BEGIN c := nvl(:NEW.CLASS_ID,:OLD.CLASS_ID);
if not inserting then
   if not ((:NEW.C_DATE_CLOSE is null and :OLD.C_DATE_CLOSE is null) or NVL((:NEW.C_DATE_CLOSE = :OLD.C_DATE_CLOSE),false)) or deleting then
      rtl.log_vals(:OLD.ID, 'DATE_CLOSE', 'DATE', to_char(:OLD.C_DATE_CLOSE,constant.DATE_FORMAT), c);
   end if;
   if not ((:NEW.C_COM_STATUS is null and :OLD.C_COM_STATUS is null) or NVL((:NEW.C_COM_STATUS = :OLD.C_COM_STATUS),false)) or deleting then
      rtl.log_vals(:OLD.ID, 'COM_STATUS', 'REFERENCE', :OLD.C_COM_STATUS||'.'||Z#COM_STATUS_PRD#INTERFACE.class$(:OLD.C_COM_STATUS,false)||'.'||Z#COM_STATUS_PRD#INTERFACE.g#code(:OLD.C_COM_STATUS), c);
   end if;
end if;
if valmgr.trigger_flag then
   if inserting then rtl.log_vals(:new.id,'#NEWOBJ#','STRUCTURE',nvl(:new.C_NUM_DOG,c),c);
   elsif deleting then rtl.log_vals(:old.id,'#DELOBJ#','STRUCTURE',nvl(:old.C_NUM_DOG,c),c); end if;
end if;
END;



Цитата:
MAP_Z#PRODUCT

Код:

DECLARE c varchar2(16):=:NEW.CLASS_ID;
BEGIN

 if not ((:NEW.C_DATE_BEGINING is null and :OLD.C_DATE_BEGINING is null)    or NVL((:NEW.C_DATE_BEGINING = :OLD.C_DATE_BEGINING),false)) then
    if lib.is_parent('DAYDOCS',c) then
      update IBS.Z#DAYDOCS set C_DATE_BEGINING= :NEW.C_DATE_BEGINING where ID=:NEW.ID;
    end if;
    if lib.is_parent('EXECUTORY_PROCES',c) then
      update IBS.Z#EXECUTORY_PROCES set C_DATE_BEGINING= :NEW.C_DATE_BEGINING where ID=:NEW.ID;
    end if;
 end if;
 if not ((:NEW.C_DATE_ENDING is null and :OLD.C_DATE_ENDING is null)    or NVL((:NEW.C_DATE_ENDING = :OLD.C_DATE_ENDING),false)) then
    if lib.is_parent('EXECUTORY_PROCES',c) then
      update IBS.Z#EXECUTORY_PROCES set C_DATE_ENDING= :NEW.C_DATE_ENDING where ID=:NEW.ID;
    end if;
 end if;
 if not ((:NEW.C_CREATE_USER is null and :OLD.C_CREATE_USER is null)    or NVL((:NEW.C_CREATE_USER = :OLD.C_CREATE_USER),false)) then
    if lib.is_parent('EXECUTORY_PROCES',c) then
      update IBS.Z#EXECUTORY_PROCES set C_CREATE_USER= :NEW.C_CREATE_USER where ID=:NEW.ID;
    end if;
 end if;
 if not ((:NEW.C_COM_STATUS is null and :OLD.C_COM_STATUS is null)    or NVL((:NEW.C_COM_STATUS = :OLD.C_COM_STATUS),false)) then
    if lib.is_parent('INKASS',c) then
      update IBS.Z#INKASS set C_COM_STATUS= :NEW.C_COM_STATUS where ID=:NEW.ID;
    end if;
    if lib.is_parent('BANK_CLIENT',c) then
      update IBS.Z#BANK_CLIENT set C_COM_STATUS= :NEW.C_COM_STATUS where ID=:NEW.ID;Z#BANK_CLIENT#INTERFACE.cache$del(:NEW.ID,:NEW.ID,c);
    end if;
    if lib.is_parent('EXECUTORY_PROCES',c) then
      update IBS.Z#EXECUTORY_PROCES set C_COM_STATUS= :NEW.C_COM_STATUS where ID=:NEW.ID;
    end if;
 end if;
 if not ((:NEW.C_DEPART is null and :OLD.C_DEPART is null)    or NVL((:NEW.C_DEPART = :OLD.C_DEPART),false)) then
    if lib.is_parent('INKASS',c) then
      update IBS.Z#INKASS set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
    end if;
    if lib.is_parent('PR_CRED',c) then
      update IBS.Z#PR_CRED set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
    end if;
    if lib.is_parent('RES_BASE_ACCS',c) then
      update IBS.Z#RES_BASE_ACCS set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
    end if;
    if lib.is_parent('AUR_DOCUM',c) then
      update IBS.Z#AUR_DOCUM set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
    end if;
    if lib.is_parent('EXECUTORY_PROCES',c) then
      update IBS.Z#EXECUTORY_PROCES set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
    end if;
 end if;
 if not ((:NEW.C_FILIAL is null and :OLD.C_FILIAL is null)    or NVL((:NEW.C_FILIAL = :OLD.C_FILIAL),false)) then
    if lib.is_parent('INKASS',c) then
      update IBS.Z#INKASS set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
    end if;
    if lib.is_parent('BANK_CLIENT',c) then
      update IBS.Z#BANK_CLIENT set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;Z#BANK_CLIENT#INTERFACE.cache$del(:NEW.ID,:NEW.ID,c);
    end if;
    if lib.is_parent('DAYDOCS',c) then
      update IBS.Z#DAYDOCS set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
    end if;
    if lib.is_parent('PR_CRED',c) then
      update IBS.Z#PR_CRED set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
    end if;
    if lib.is_parent('RES_BASE_ACCS',c) then
      update IBS.Z#RES_BASE_ACCS set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
    end if;
    if lib.is_parent('EXECUTORY_PROCES',c) then
      update IBS.Z#EXECUTORY_PROCES set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
    end if;
    if lib.is_parent('DM_SDELKA',c) then
      update IBS.Z#DM_SDELKA set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
    end if;
    if lib.is_parent('SDELKA',c) then
      update IBS.Z#SDELKA set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
    end if;
 end if;
 if not ((:NEW.C_DATE_CLOSE is null and :OLD.C_DATE_CLOSE is null)    or NVL((:NEW.C_DATE_CLOSE = :OLD.C_DATE_CLOSE),false)) then
    if lib.is_parent('BANK_CLIENT',c) then
      update IBS.Z#BANK_CLIENT set C_DATE_CLOSE= :NEW.C_DATE_CLOSE where ID=:NEW.ID;Z#BANK_CLIENT#INTERFACE.cache$del(:NEW.ID,:NEW.ID,c);
    end if;
    if lib.is_parent('EXECUTORY_PROCES',c) then
      update IBS.Z#EXECUTORY_PROCES set C_DATE_CLOSE= :NEW.C_DATE_CLOSE where ID=:NEW.ID;
    end if;
 end if;
 if not ((:NEW.C_DATE_BEGIN is null and :OLD.C_DATE_BEGIN is null)    or NVL((:NEW.C_DATE_BEGIN = :OLD.C_DATE_BEGIN),false)) then
    if lib.is_parent('EXECUTORY_PROCES',c) then
      update IBS.Z#EXECUTORY_PROCES set C_DATE_BEGIN= :NEW.C_DATE_BEGIN where ID=:NEW.ID;
    end if;
    if lib.is_parent('DM_DAYDOCS',c) then
      update IBS.Z#DM_DAYDOCS set C_DATE_BEGIN= :NEW.C_DATE_BEGIN where ID=:NEW.ID;
    end if;
 end if;
 if not ((:NEW.C_NUM_DOG is null and :OLD.C_NUM_DOG is null)    or NVL((:NEW.C_NUM_DOG = :OLD.C_NUM_DOG),false)) then
    if lib.is_parent('INKASS',c) then
      update IBS.Z#INKASS set C_NUM_DOG= :NEW.C_NUM_DOG where ID=:NEW.ID;
    end if;
    if lib.is_parent('PR_CRED',c) then
      update IBS.Z#PR_CRED set C_NUM_DOG= :NEW.C_NUM_DOG where ID=:NEW.ID;
    end if;
    if lib.is_parent('EXECUTORY_PROCES',c) then
      update IBS.Z#EXECUTORY_PROCES set C_NUM_DOG= :NEW.C_NUM_DOG where ID=:NEW.ID;
    end if;
 end if;
END;
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru