有两个表:
t_A和t_B
t_B表是空表,
t_A表中有数据,当修改和删除该表中一行记录时,这行记录所有字段内容插入t_B表中,在加上操作时间;同时修改时要插入两行记录,修改前和修改后的。
该怎么写这个触发器啊?先谢谢了

解决方案 »

  1.   

    SQL> create or replace trigger MODIFY_TAB_A
      2    after update on t_a
      3    for each row
      4  declare
      5    -- local variables here
      6  begin
      7    insert into t_B (id, name, reason, Modifydate)values(:old.id, :old.name,
    'old_record',sysdate);
      8    insert into t_B (id, name, reason, Modifydate)values(:new.id, :new.name,
    'new_record',sysdate);
      9  end MODIFY_TAB_A;
     10  /触发器已创建SQL> create or replace trigger DELETE_TAB_B
      2    after delete on t_a
      3    for each row
      4  declare
      5    -- local variables here
      6  begin
      7    insert into t_B (id, name, reason, Modifydate)values(:old.id, :old.name,
    'del_record',sysdate);
      8  end DELETE_TAB_B;
      9  /触发器已创建SQL> update t_A set id = 5 where name = 'maomao';已更新 1 行。SQL> select * from t_B;        ID NAME       REASON     MODIFYDATE
    ---------- ---------- ---------- -------------------
             2 maomao     old_record 2006-08-24 11:00:07
             5 maomao     new_record 2006-08-24 11:00:07
      

  2.   

    事实上用两条记录表示修改不好。
    可以把字段多一倍出来,一半存老值,一半存新值,这样容易对应。还加两字段类型,时间
    比如删除类型就是'D',修改就是'M'.create or replace trigger dm 
    before delete or modify on t_A
    for each row
    begin 
    if deleting then 
    insert into ...(.....,'D',sysdate);
    elsif modifing then
    insert into ...(....,'M',sysdate);
    end if;
    end;
    /
    里面肯定语法错误很多,有很久没有碰过ORACLE了,不过思路应该是这样的。
      

  3.   

    发现俺的错误,modify应该是update。
    记性完全不行了,呵呵 。
      

  4.   

    CREATE OR REPLACE TRIGGER T_LRJL AFTER
    UPDATE ON T_A
    FOR EACH ROW
    DECLARE
    BEGIN
       insert into T_B (:OLD.IS_BALANCE,:OLD.WTRUCK_TIME,'修改前');
     insert into T_B (:NEW.IS_BALANCE ,sysdate,'修改后');
    END;以上编译报下面错误
    Warning: Trigger created with compilation errors请楼上看看
      

  5.   

    是不是insert语句的问题?你不在触发器中直接insert一下看看有没有问题??
      

  6.   

    insert into T_B values(:OLD.IS_BALANCE,:OLD.WTRUCK_TIME,'修改前');
    少了values.楼主可以参照我的思路,那样修改前后的值容易对比一些。
      

  7.   


    insert into tab_name values(:OLD.IS_BALANCE,:OLD.WTRUCK_TIME,'修改前')楼主少了关键字values