kasyanov
Дата: 26.02.2007 13:20:25
Добрый день!
Нужно поставить временную заплатку:
при изменении одного из полей таблицы в определенное значение нужно удалять эту запись из этой таблицы.
Триггер instead не проходит, потому что он насколько я понял накладывается на вью, а программа (чужая) изменяет непосредственно таблицу и эту программу менять нельзя .
Кроме того, нужно чтобы именно ВМЕСТО изменения было удаление, потому что изменения перехватываются через cdc (change data capture) и обработчику этих изменений видеть update не надо.
Попытался в лоб написать триггер before for each row, который удаляет свою строчку, но при попытке изменения получаю ошибку ORA-04091 - типа таблица изменяется, а триггер может этого не увидеть.
Подскажите, есть ли какие решения на этот счет?
Алексей.
orawish
Дата: 26.02.2007 13:31:48
Можно из триггера (автономно, конечно) стартануть джоб на-раз, которого попросить убить ту строку (самым обычным образом - т.е. подождавши конца текущей блокировки).
Грубо, но как затычка - мож и сойдет..
Dergs
Дата: 26.02.2007 17:47:16
Попытался в лоб написать триггер before for each row, который удаляет свою строчку, но при попытке изменения получаю ошибку ORA-04091 - типа таблица изменяется, а триггер может этого не увидеть.
В этом триггере сохраняешь ключ записи в коллекцию, а в триггере After update уровня инструкции находишь по ключу эту запись и удаляешь ее.