преобразовать update в delete

kasyanov
Дата: 26.02.2007 13:20:25
Добрый день!
Нужно поставить временную заплатку:
при изменении одного из полей таблицы в определенное значение нужно удалять эту запись из этой таблицы.
Триггер instead не проходит, потому что он насколько я понял накладывается на вью, а программа (чужая) изменяет непосредственно таблицу и эту программу менять нельзя .

Кроме того, нужно чтобы именно ВМЕСТО изменения было удаление, потому что изменения перехватываются через cdc (change data capture) и обработчику этих изменений видеть update не надо.

Попытался в лоб написать триггер before for each row, который удаляет свою строчку, но при попытке изменения получаю ошибку ORA-04091 - типа таблица изменяется, а триггер может этого не увидеть.

Подскажите, есть ли какие решения на этот счет?

Алексей.
Бабичев Сергей
Дата: 26.02.2007 13:24:16
kasyanov
Попытался в лоб написать триггер before for each row, который удаляет свою строчку, но при попытке изменения получаю ошибку ORA-04091 - типа таблица изменяется, а триггер может этого не увидеть.
Тынц - обход мутирования таблиц, если что.
dmidek
Дата: 26.02.2007 13:25:17
Можно попробовать пробиться с INSTEAD- триггером, взяв на вооружение
идею Elica c переименованием таблицы и созданием одноименного view...
orawish
Дата: 26.02.2007 13:31:48
Можно из триггера (автономно, конечно) стартануть джоб на-раз, которого попросить убить ту строку (самым обычным образом - т.е. подождавши конца текущей блокировки).
Грубо, но как затычка - мож и сойдет..
Dergs
Дата: 26.02.2007 17:47:16
Попытался в лоб написать триггер before for each row, который удаляет свою строчку, но при попытке изменения получаю ошибку ORA-04091 - типа таблица изменяется, а триггер может этого не увидеть.
В этом триггере сохраняешь ключ записи в коллекцию, а в триггере After update уровня инструкции находишь по ключу эту запись и удаляешь ее.
arhey
Дата: 26.02.2007 17:52:37
Dergs

В этом триггере сохраняешь ключ записи в коллекцию, а в триггере After update уровня инструкции находишь по ключу эту запись и удаляешь ее.

change data capture не знаю. с 10 не работал.
но предполагаю, что он уже обработает строку, так что триггер такой не покатит