你说的情况,除非是你手工disable,否则该触发器将一直为valid&enable如果你手工disable,其依然是valid,至于另外一个状态,你亲手disable之,不用说了吧?做个实验。 SQL> create or replace trigger trig_test 2 before INSERT on test 3 for each row 4 DECLARE 5 begin 6 NULL; 7 end trig_test; 8 /触发器已创建SQL> show error 没有错误。 SQL> SQL> SELECT t.trigger_name,t.status,o.status FROM User_Triggers t,user_objects o 2 WHERE o.object_name=t.trigger_name AND o.object_type='TRIGGER';TRIGGER_NAME STATUS STATUS ------------------------------ -------- ------- TRIG_TEST ENABLED VALIDSQL> alter trigger TRIG_TEST disable;触发器已更改SQL> SELECT t.trigger_name,t.status,o.status FROM User_Triggers t,user_objects o 2 WHERE o.object_name=t.trigger_name AND o.object_type='TRIGGER';TRIGGER_NAME STATUS STATUS ------------------------------ -------- ------- TRIG_TEST DISABLED VALIDSQL>
你查看dba_triggers视图就知道了
你的假设命题,怎么成立的?只要该触发器引用的依赖对象在,编译没问题,而你也并未手工disable之,它就能用。你怎么弄的它时间长了就不能用了?描述清楚点。
对oracle不是很了解,假设就是编译能过,但是就是不能用了,一个假设而已,那应该是什么状态呢?
SQL> create or replace trigger trig_test
2 before INSERT on test
3 for each row
4 DECLARE
5 begin
6 NULL;
7 end trig_test;
8 /触发器已创建SQL> show error
没有错误。
SQL>
SQL> SELECT t.trigger_name,t.status,o.status FROM User_Triggers t,user_objects o 2 WHERE o.object_name=t.trigger_name AND o.object_type='TRIGGER';TRIGGER_NAME STATUS STATUS
------------------------------ -------- -------
TRIG_TEST ENABLED VALIDSQL> alter trigger TRIG_TEST disable;触发器已更改SQL> SELECT t.trigger_name,t.status,o.status FROM User_Triggers t,user_objects o 2 WHERE o.object_name=t.trigger_name AND o.object_type='TRIGGER';TRIGGER_NAME STATUS STATUS
------------------------------ -------- -------
TRIG_TEST DISABLED VALIDSQL>