我的一个例子create table a1 (
    id number(8),
    compname varchar2(20),
    compcode varchar2(50),
    chapter  varchar2(50),
    compnumber number(8),
    dealdate  date
);create table a2 (
    id number(8),
    compname varchar2(20),
    compcode varchar2(50),
    chapter  varchar2(50),
    compnumber number(8),
    dealdate  date
);
CREATE OR REPLACE TRIGGER tr_bf_test
BEFORE INSERT OR UPDATE OR DELETE OF ID ON a1 
FOR EACH ROW
BEGIN
  IF INSERTING THEN
    INSERT INTO a2
    VALUES(:new.id,:new.compname,:new.compcode,:new.chapter,:new.compnumber,:new.dealdate);
  ELSIF UPDATING THEN
    UPDATE a2 SET id=:new.ID,
                     compname=:new.compname,
                     compcode=:new.compcode,
                     chapter=:new.chapter,
                     compnumber=:new.compnumber,
                     dealdate=:new.dealdate
    WHERE ID = :old.ID;
  ELSE 
    DELETE FROM a2
    WHERE ID = :old.ID;
  END IF;
END tr_bf_TTRIG;
/

解决方案 »

  1.   

    写这些东西,最好下载各pl/sql developer比较好。
      

  2.   

    在sql/plus中
    删除,重新创建吧,
    drop trigger triggername;
    create trigger triggername
    ............show errors trigger triggername;
    具体问题具体分析
      

  3.   

    编译通过只能说触发器的语法没有问题,执行时出错是正常的,和用C++编译时通过,执行时出错的道理是一样的。
    所以上面的大侠建议用pl/sql developer是有道理的,这个工具可以在运行期调试触发器等。