针对orcale的某个表建立一个触发器,
CREATE OR REPLACE TRIGGER x_t 
 after insert on  x
 begin 
 y_pro;
 end;但是,往表x中插入数据的时候可能一条或多条,我只想全部插入提交之后在触发触发器,或者在存储过程y_pro能够判断x的数据是否已经提交,已经提交则执行,否则不执行,如何实现呢?请高手指点。

解决方案 »

  1.   

    after insert  就是插入提交以后触发的事件
      

  2.   

    LZ的意思是插入多条数据并commit后只进行一次触发吧。你这个需求用触发器可能没法实现。
      

  3.   

    vc555(学习甲骨文)说得对,我就是想插入多条以后在触发触发器,比如:
    insert into x(a,b)
           values('a1', 'b1');insert into x(a,b)
           values('a2', 'b2');commit;在commit后触发触发器x_t , 或者在存储过程 y_pro中判断到commit之后才执行。
      

  4.   

    没法。你的dml和触发器属同一事务,没法先commit再触发。
      

  5.   

    如果触发器不能在commit之后触发,那么在存储过程 y_pro中能否判断到x的数据未提交呢?多谢指点!
      

  6.   

    after insert就是在commit之后才触发
      

  7.   

    不是啊,我调试过,比如上面的例子
    insert into x(a,b)
           values('a1', 'b1');insert into x(a,b)
           values('a2', 'b2');commit;
    每个insert语句都触发触发器x_t,总共触发两次
      

  8.   

    是的,Oralce如果要实现批量更新一次触发完成功能,好像不行
    SQL Server可以实现,但是Oracle 只能实现记录级触发更新。
      

  9.   

    wang_wuhui() ,老兄你好!存儲過程 實現很簡單..
    如何实现呢?能教教我吗?
      

  10.   

    weiyihuang(黄三皮) ,你好!
    就上面的例子,你觉得怎么样设标志位,谢谢指点!
    insert into x(a,b)
           values('a1', 'b1');insert into x(a,b)
           values('a2', 'b2');commit;
      

  11.   

    你可以写一个job,在
    insert into x(a,b)
           values('a1', 'b1');
    时触发job执行,在job里判断数据是否已经提交,因为,job在开始执行的时候x1的数据和x1提交后的数据是不一样的,但是你必须使用行级触发器,表级触发器不能实现你的目的。