Удаляет ли СУБД свои триггеры при необходимости? - PullRequest
0 голосов
/ 22 января 2012

Предположим, у нас есть триггер с именем Foo.

Foo зависит от таблицы T и зависит от столбцов a, b, c.

Если таблица T отброшена, триггер T также сброшен?

Если c удален, триггер T сброшен?

Если изменение происходит для таблицы T, но не влияет на столбцы a, b, c, триггер T сброшен? Заранее благодарю за ответы,

С наилучшими пожеланиями, Лайос Арпад.

Ответы [ 3 ]

3 голосов
/ 22 января 2012

Только что попробовав, я могу ответить на три ваших вопроса:

  1. Если вы сбросите таблицу T , триггер также будет сброшен.
  2. Если вы отбрасываете столбец, от которого зависит триггер (например, c в вашем примере), триггер не сбрасывается, а вместо этого становится недействительным. Затем вы получите ORA-04098 «триггер XYZ недействителен и не прошел повторную проверку», если событие триггера в таблице происходит (например, триггер является триггером BEFORE INSERT и вы INSERT в таблицу).
  3. Если вы вносите изменения в таблицу T , которые не влияют на триггер, триггер не сбрасывается и остается действительным.
1 голос
/ 22 января 2012

Единственный сценарий, когда триггер сбрасывается без явного

DROP TRIGGER <trigger_name>;

, это когда таблица также отбрасывается.

DROP <TABLE_NAME>;  

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

   select * from user_objects where status != 'VALID'  
   -- invalid objects associated with the user you are logged in as
   select * from all_objects where status != 'VALID' 
   -- all invalid objects  in the database

В некоторых случаях, когда вы указываете каскад, пропускается «каскад».Но это сфокусировано на удалении дочерних таблиц.

drop table <table_name> cascade constraints;

Документация Oracle 10g по DROP TABLE DDL.

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

0 голосов
/ 22 января 2012

Вам действительно стоит попробовать это или проконсультироваться с Oracle docs / support.У меня нет доступа к БД Oracle (сейчас выходные ;-)), чтобы проверить ее, но, насколько я помню, результаты этих действий будут следующими:

  1. Да (триггеры являются частью соответствующей таблицы)
  2. не влияет на триггеры
  3. не влияет на триггеры
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...