日期:2014-05-17  浏览次数:20737 次

触发器错误求教
表:MZDX
其中含日期字段udate

现建立触发器,记录创建/修改时间
create or replace trigger mzdx_trigger  
  before insert or       
      update 
  on MZDX --目标表名 
  for each row 
  begin   
    :new.udate :=sysdate;
  end;

但更新则出现错误:MZDX_TRIGGER is invalid and failed re-validation

新手不知错误在哪,请大家帮忙
------最佳解决方案--------------------
引用:
进pl/sql查看该触发器图标是打叉的,状态提示invalid,执行update语句如:
update mzdx set col1='1' where id=1
报以上的错:MZDX_TRIGGER is invalid and failed re-validation

非法触发器非法在哪呢?

目测触发器编译错误
用pl/sql的REPORTS菜单下有一个complication errors选项,定位到该触发器,看看有什么编译错误

如果是pls-00103错的话,多数是全角空格问题,复制粘贴的结果,建议重新写一遍
------其他解决方案--------------------
SQL> create table a001(id number,udate date);

Table created.

SQL> create or replace trigger tri
  2  before insert or update on a001
  3  for each row
  4  begin
  5  :new.udate := sysdate;
  6  end;
  7  /

Trigger created.

SQL> show error
No errors.
SQL> insert into a001(1,sysdate);
insert into a001(1,sysdate)
                 *
ERROR at line 1:
ORA-00928: missing SELECT keyword


SQL> insert into a001 values (1,sysdate);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from a001;

        ID UDATE
---------- ------------
         1 09-OCT-12

SQL> alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss';

Session altered.

SQL> select * from a001;

        ID UDATE
---------- -------------------
         1 2012/10/09 22:49:39

SQL> update a001 set id=2;

1 row updated.

SQL> commit;

Commit complete.

SQL> select * from a001;

        ID UDATE
---------- -------------------
         2 2012/10/09 22:53:12

SQL>

------其他解决方案--------------------
完全没有问题!
------其他解决方案--------------------
重新执行你的触发器脚本之后 show error 看看具体错误出现在哪里..
------其他解决方案--------------------
进pl/sql查看该触发器图标是打叉的,状态提示invalid,执行update语句如:
update mzdx set col1='1' where id=1
报以上的错:MZDX_TRIGGER is invalid and failed re-validation

非法触发器非法在哪呢?
------其他解决方案--------------------