利用:NEW.field1和:OLD.field1来判断是否由0变为1。
fill_B中不要commit。

解决方案 »

  1.   

    bobfang(匆匆过客) 的回答完全正确。:)
      

  2.   

    多谢bobfang(匆匆过客) 不过如果fill_B中不使用commit的话, fill_B中执行的动作如update, insert要如何提交呢?还有就是现在执行报错:table bill.table_A is mutating, trigger/function may not see it这个要如何解决?
      

  3.   

    create or replace trigger a_b 
    after update on your_user.a for each row
    when (old.field1=0 and new.field1=1)
    begin
    exec fill_b;
    commit;
    end a_b;
      

  4.   

    trigger中能commit么?table bill.table_A is mutating, trigger/function may not see it
    是怎么回事, 要怎么解决?
      

  5.   

    1. trigger中不能commit
    2. 你在bill.table_A的trigger中对bill.table_A进行了操作(包括查询),除了before insert触发器外,是不可行的。
      

  6.   

    那么如果说我希望在对table_A的field1改变时, 根据table_A的field2向table_B插入数据
    一般该怎么做? trigger中不能commit, 那trigger的事务提交怎么办呢?我现在的做法是:create or replace trigger tri_tableA_status
    ...
    begin
        proce1;
    end; create or replace procedure proce1
    is
    ...
        b_field integer;
    begin
    ...
    select field2 into b_field from table_B;
    ...
    end;
      

  7.   

    trigger中不能commit,并且不应该支持,否则,保证不了事物的完整性,
    trigger中的语句与你调用触发此trigger的语句是属于同一个事物
      

  8.   

    那么如果说我希望在对table_A的field1改变时(update),根据table_A的field2(也就是做select得到field2的数值)向table_B插入数据一般的写法是怎样的?