Как Вы проверяете на обновления через многие таблицы в Oracle?

Вы обычно только получаете отказ сегментации, при попытке получить доступ к памяти, Ваш процесс не владеет.

В случае чего Вы видите a[11]a[10] между прочим), память, которой Ваш процесс владеет, но не принадлежит a[] массив. a[25000] так далеко от a[], это, вероятно, вне Вашей памяти в целом.

Изменение a[11] намного более коварно, поскольку это тихо влияет на другую переменную (или стековый фрейм, который может вызвать другой отказ сегментации, когда Ваша функция возвращается).

5
задан Brian Tompsett - 汤莱恩 5 October 2016 в 22:08
поделиться

3 ответа

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

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

Примечание. Я предполагаю, что ORACLE - это базы данных, поскольку вы отметили свой вопрос с помощью ORACLE

2
ответ дан 14 December 2019 в 01:12
поделиться

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

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

5
ответ дан 14 December 2019 в 01:12
поделиться

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

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

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

2
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: