如题,我自己的理解是valid和invalid状态表示编译能不能通过的状态,enable/disable表示的是:编译通过了,只是设置了可不可用状态。不知道我这样理解对不对?

解决方案 »

  1.   

    如果触发器用时间长了,其他的什么原因,不工作了,但是编译可以通过,代码没有问题,那么enable 会变成invalid,还是变成 disable 啊?
      

  2.   

    我是说不工作了,还是enable吗?
      

  3.   

    就算invalid了,也不影响enable状态
    你查看dba_triggers视图就知道了
      

  4.   

    我现在想问的是,如果触发器现在是enable,valid状态,如果就是时间长了,触发器不能用了,但是代码什么的全部正确,那现在的状态是什么,还是enable,valid状态吗?
      

  5.   


    你的假设命题,怎么成立的?只要该触发器引用的依赖对象在,编译没问题,而你也并未手工disable之,它就能用。你怎么弄的它时间长了就不能用了?描述清楚点。
      

  6.   


    对oracle不是很了解,假设就是编译能过,但是就是不能用了,一个假设而已,那应该是什么状态呢?
      

  7.   

    你说的情况,除非是你手工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>