数据库表名mrzbxx ,有字段obj1,obj2,obj3,当系统中插入一条数据时。
触发器实现update,使obj3=obj1+obj2.
请各位帮帮我....

解决方案 »

  1.   

    create or replace trigger tr_trigger_mrzbxx
      after insert on mrzbxx
    declare
    begin
      update mrzbxx set obj3=obj1||obj2 where obj1 = :old.obj1 and obj2 = :old.obj2;
      commit;
    end tr_trigger_mrzbxx;
      

  2.   

    你的是字段相加还是把两个字符连接起来.create or replace trigger tri_tb before insert on mrzbxx for each row
    declare
    pragma autonomous_transaction;
    begin
    update mrzbxx set obj3=:new.obj1+:new.obj2 where :old.obj1=:new.obj1 and :old.obj2=:new.obj2;
    end;
      

  3.   

    字符相连接update mrzbxx set obj3=:new.obj1||:new.obj2 where :old.obj1=:new.obj1 and :old.obj2=:new.obj2;
      

  4.   

    以上办法我试过了,还是不行呀。第一种方法提示:OLD,NEW不允许出现在表级触发器中
      

  5.   

    create or replace trigger tri_tb before insert on mrzbxx for each row
    begin
    :new.obj3:=:new.obj1+:new.obj2; 
    end;
      

  6.   

    create or replace trigger tri_tb before insert on mrzbxx for each row
    declare
    pragma autonomous_transaction;--表内自更新要加
    begin
    update mrzbxx set obj3=:new.obj1+:new.obj2 where :old.obj1=:new.obj1 and :old.obj2=:new.obj2;
    end;
      

  7.   

    直接:new.obj3:=:new.obj1+:new.obj2; 这个就行了,要where语句干啥
      

  8.   

    另外for each row触发器不允许对本表进行操作,只能用 old和new
      

  9.   

    恩,楼主的问题好像不能用触发器实现,不用自治事务的情况下,不能对本表进行操作。使用了自治事务,因为insert语句还没commit,update只能update insert之前的数据记录,当前正在插入的记录是没法update的。
    还有,我不明白的就是,为什么不在insert语句中写obj3=obj1+obj2?
      

  10.   

    贴下试验的过程,楼主可以参考下
    SQL> DROP TABLE test;
     
    Table dropped
     
    SQL> 
    SQL> CREATE TABLE test
      2  (a NUMBER(2));
     
    Table created
     
    SQL> 
    SQL> CREATE OR REPLACE TRIGGER TR_TEST
      2    AFTER INSERT ON TEST
      3    FOR EACH ROW
      4  DECLARE
      5   v_count NUMBER(2);
      6   pragma autonomous_transaction;
      7  BEGIN
      8  
      9    SELECT COUNT(*) INTO v_count FROM test WHERE a=:new.a;
     10    IF v_count>0 THEN
     11    UPDATE  test SET a=:new.a+1 WHERE a=:new.a;
     12    END IF;
     13    COMMIT;
     14  END TR_TEST;
     15  /
     
    Trigger created
     
    SQL> insert into test values(1);
     
    1 row inserted
     
    SQL> select * from test;
     
      A
    ---
      1
     
    SQL> insert into test values(1);
     
    1 row inserted
     
    SQL> select * from test;
     
      A
    ---
      1
      1
     
    SQL> commit;
     
    Commit complete
     
    SQL> insert into test values(1);
     
    1 row inserted
     
    SQL> select * from test;
     
      A
    ---
      2
      2
      1
     
    SQL> commit;
     
    Commit complete
     
    SQL> select * from test;
     
      A
    ---
      2
      2
      1
     
    SQL>