прикладные триггеры (операции типа «Триггер»)
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Пт Сен 04, 2009 13:59  прикладные триггеры (операции типа «Триггер») |
|
Полезность: Нет оценки
|
коллеги, кто делал такое на своей схеме?
научите, плз, как добиться вызова триггера в ожидаемые моменты
все, казалось бы, по документации делаем - не вызывается.
или это никогда и не работало?... по крайней мере, не нашли у себя на схеме дистрибутивных прикладных триггеров. _________________ 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 пункта сделали.
Далее ничего не произошло до момента перекомпиляции операции, которая производит отслеживаемое изменение.
Получается, что надо вручную искать и перекомпилировать все такие операции?
Решили написать в ЦФТ об этом недокументированном моменте. |
|
 |
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. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|