триггер для объединения столбцов по группам в новую таблицу - PullRequest
0 голосов
/ 13 января 2012

У меня есть триггер, который объединяет столбец таблицы по идентификатору и вставляет его в новую таблицу. Всякий раз, когда обновление, вставка, удаление срабатывает в таблице A, оно будет группировать по идентификатору и объединять столбец 1 и вставлять его в таблицу B.

Проблема в том, что при срабатывании триггера Oracle генерирует таблицу мутаций исключений. Это связано с тем, что триггер выполняет запрос:

delete from tableb where id = :id;
insert into tablea (id, col1)
select id, wm_concat(col1) from tablea group by id

Как это исправить с помощью триггеров? (не может использовать хранимую процедуру и хотел бы избежать использования запланированной задачи).

1 Ответ

1 голос
/ 13 января 2012

"Как это исправить с помощью триггеров? (Нельзя использовать хранимую процедуру и хотел бы избежать использования запланированного задания). "

Нет способа сделать это, используя только триггеры.

Вы не можете использовать триггеры уровня строки, потому что, как вы обнаружили, select выбрасывает исключение изменяющейся таблицы.

Вы не можете использовать триггеры уровня таблицы, потому что мы не можем ссылаться на: NEW или: OLD значения в них.

Можно передать значения: NEW или: OLD в триггер уровня таблицы, заполнив переменную пространства имен в триггерах уровня строки, но для контекстов требуется хранимая процедура, которую, как вы говорите, не можете создать.

Как насчет стола? Вам разрешат создать таблицу для передачи затронутого идентификатора?

Но это слишком затратно, просто чтобы реализовать неприятную часть функциональности. Исключение ORA-04091 почти всегда указывает на недостаток модели данных, и это, безусловно, имеет место в данном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...