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

прикладные триггеры (операции типа «Триггер»)

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


Вступление в Клуб: 29.06.2007
СообщениеПт Сен 04, 2009 13:59   прикладные триггеры (операции типа «Триггер») Ответить с цитатой
Полезность: Нет оценки
коллеги, кто делал такое на своей схеме?
научите, плз, как добиться вызова триггера в ожидаемые моменты Smile
все, казалось бы, по документации делаем - не вызывается.
или это никогда и не работало?... Smile по крайней мере, не нашли у себя на схеме дистрибутивных прикладных триггеров.
_________________
two bee or not two bee
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеПн Сен 07, 2009 11:41    Ответить с цитатой
Полезность: 1
Когда-то они точно работали...
1. Пишешь триггер
2. В свойствах типа на первой закладке - галочки и комбобокс
3. Если на изменения реквизитов, то еще в закладке Таблица отмечаешь отслеживаемые реквизиты

Это все сделали?
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеПн Сен 07, 2009 12:53    Ответить с цитатой
Полезность: Нет оценки
Да все 3 пункта сделали.
Далее ничего не произошло до момента перекомпиляции операции, которая производит отслеживаемое изменение.
Получается, что надо вручную искать и перекомпилировать все такие операции? Shocked
Решили написать в ЦФТ об этом недокументированном моменте.
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеПн Сен 07, 2009 13:08    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
Да все 3 пункта сделали.
Далее ничего не произошло до момента перекомпиляции операции, которая производит отслеживаемое изменение.

<...>


Странно.
Дмитрий, сообщи, пожалуйста, что ЦФТ ответит. Интересно, что за связь такая.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеПн Сен 07, 2009 13:51    Ответить с цитатой
Полезность: 3
После перекомпиляции в интерфейсном пакете появляется вызов check$:
Код:
      procedure Set$Obj$This is
      begin
         if plp$THIS is null then return; end if;
         Z#PERSONAL_ADDRESS#INTERFACE.check$(plp$THIS,plp$var$,plp$old$,plp$class$);
         Z#PERSONAL_ADDRESS#INTERFACE.set_PERSONAL_ADDRESS(plp$THIS,null,plp$var$,false,false);
         plp$old$ := plp$var$;
      end;

Соответственно именно этот check$ и вызывает триггерную операцию. Я почему-то думал, что создастся настоящий оракловый триггер, который будет вызывать триггерную операцию. Ан нет.
Интересен еще такой факт - в таком режиме не выполняется update d(d.[....] = '...') in ::[.....]. Причина понятна - при таком вызове триггерной операции не из триггера , а из интерфейсного пакета, обработать массовые апдейты не представляется возможным. Видимо поэтому ядерщики и запретили массовый апдейт контролируемых полей.
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеПт Авг 28, 2015 09:09    Ответить с цитатой
Полезность: Нет оценки
Коллеги, есть у кого пример готовой операции-триггера, можете скинуть mdb? не нашел примеров на схеме(
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеПт Авг 28, 2015 09:18    Ответить с цитатой
Полезность: Нет оценки
Быстрый поиск всех операций типа триггер на схеме может быть таким:

Код:

select * from methods a where a.flags = 'T'
ivn
Участник


Вступление в Клуб: 27.11.2013
СообщениеВт Апр 18, 2017 18:59    Ответить с цитатой
Полезность: 1
Как уже писал timochev массовые апдейты не представляется возможным.
Это ключевой момент. Если сделать групповой апдейт по табличке с этим прикладным триггером, операция сломается, выход один - использовать динамический sql.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

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