各位大虾好,有一个这样的问题不知道能不能用触发器实现,情况如下
    我有两个表:legal、legal_history ,legal表中有好多数据会进行修改,现在我想通过触发器记录下所有的修改痕迹,比如说legal表中有条数据为A,改后这条数据变成了B,我需要把A记录后legal_history中,下次如果再改,由B变成C,那么legal_history表中记录下B这条记录,依此类推,了解到触发器的一些作用后,我想如果这种方法可以实现,那么比程序的效率将要快,个人认为,只是不知道我的想法触发器能不能满足,请各位高手指点,谢谢      数据库是oracle

解决方案 »

  1.   

    触发器的基本用法,大致是这样的
    create or replace trigger tr_legal_change
      after update  on legal  
      for each row    
      declare
    begin
      insert into  legal_history 
        values(:old.a,:old.b,:old.c,sysdate);
        end tr_legal_change;
        
        
      

  2.   

    正是触发器的典型应用啊。
    示例代码:CREATE OR REPLACE TRIGGER TriggerUpdateLegeal
        AFTER UPDATE ON legal  
        FOR EACH ROW
    DECLARE
      
    BEGIN
        INSERT INTO legal_history VALUES(:OLD.字段1, :OLD.字段2, ....);
    END TriggerUpdateLegeal;
      

  3.   

    各位老兄,我按你们的说法做啦,具体操作如:
    create table mm_test_triger(id number,name varchar2(20),timestamp date);
    insert into mm_test_triger values(1,'123123',sysdate);
    insert into mm_test_triger values(2,'123123',sysdate);
    insert into mm_test_triger values(3,'123123',sysdate);
    insert into mm_test_triger values(4,'123123',sysdate);
    insert into mm_test_triger values(5,'123123',sysdate);
    create table mm_test_triger_history(id number,name varchar2(20),timestamp date,state varchar2(2));create or replace trigger mm_test_triger
      after update  on mm_test_triger  
      for each row    
      declare
    begin   insert into  mm_test_triger_history  values(:OLD.id,:OLD.name,:OLD.timestamp); end mm_test_triger;
     
     update mm_test_triger m set m.name  = 'jkkjk' where m.id = 1;
    然后报 oracle:04098:触发器‘SYSTEM.MM_TEST_TRIGER'无效且未通过验证在网上查啦,但是找不到具体的解决方案,怎么回事呢?我该如何做