Как вы проверяете наличие обновлений для многих таблиц в Oracle? - PullRequest
5 голосов
/ 27 августа 2009

У меня есть триггер для проверки одного столбца в таблице, когда в этом столбце есть обновление (ПОСЛЕ ОБНОВЛЕНИЯ), вызывается мой триггер, а затем я вызываю хранимую процедуру из своего триггера для выполнения некоторой операции логика закодирована в Java.

Пока все хорошо. Теперь все усложняется, есть новое требование, которое подразумевает, что та же логика (логика, выполняемая триггером) также должна выполняться, если есть изменения в столбцах, которые находятся в других 4 таблицах. Я думаю, что нецелесообразно иметь один и тот же триггер в 5 разных таблицах для прослушивания разных столбцов, и я не уверен, стоит ли мне создавать «представление» для этих столбцов и ставить один триггер в этом представлении (какова стоимость платить с точки зрения производительности и / или ресурсов?)

В вашем предыдущем опыте работы с Oracle, каким был ваш подход или решения для этого сценария?

Ответы [ 3 ]

5 голосов
/ 27 августа 2009

Единственный способ использовать один триггер для нескольких таблиц - создать представление.

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

2 голосов
/ 27 августа 2009

Почему бы не сохранить свою логику в хранимой процедуре, а затем просто вызвать ее из триггеров?

Я бы также предложил вам взглянуть на уведомление об изменении , исходя из этого звука, это, вероятно, то, что вы хотите больше, чем просто старый старый триггер.

Также будьте осторожны при вызове внешних ресурсов. Все, что вы вызываете в триггере, должно быть транзакционным, поскольку Oracle может запустить триггер несколько раз, прежде чем ваш DML будет фактически завершен.

2 голосов
/ 27 августа 2009
  1. Можете ли вы создать представление, объединяющее все рассматриваемые таблицы? Есть ли у них внешние ключи друг к другу?
  2. Предполагая, что вы можете создать представление, все ли таблицы будут обновляться с использованием сложного представления? На это есть серьезные ограничения.
  3. Обычно мы создаем только триггеры INSTEAD OF для представления. Существуют также ограничения на триггеры, основанные на операциях UPDATE. Полный список проблем см. На

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm#SQLRF01405

Примечание: я предполагаю, что ORACLE - это БД, поскольку вы отметили свой вопрос ORACLE

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