写触发器碰上需要access自身表,经高手指点了2种处理方法:
1、使用自治事务;
2、用行级触发器+语句级触发器+包或临时表来做;问一下这两种方法哪种比较好?各有什么优缺点?多谢!

解决方案 »

  1.   

    最好不是before触发器,这个 tom kyte在他的文章中做过试验,有些情况会导致触发器执行两次,具体忘了原始子句+触发器完全可以用存储过程来解决。
      

  2.   

    具体需求如下:用户A下只有3个表,A2,A3,A4,当A4中的status改为2时,把表A2中相关的数据用触发器写到表B中,表B和A2结构相同。
    为了能看清楚表结构,空格用代替表A2:
    字段名称 。。外键 。主键。 说明
    deal_plan_step_id PK  
    deal_plan_id。TK_DealPlan.DealPLanID  
    step_no   
    step_desc  
    表A3:
    字段名称 。外键 。。主键 说明
    deal_plan_order_unit_id PK  
    deal_plan_step_id 。A2.DealPlanStepID  
    order_unit_desc  
    plan_action_unit_type_id  
    表A4:
    字段名称 外键 主键 说明
    public_issue_plan_order_id。 PK  
    deal_plan_order_unit_id 。A3.DealPlanOrderUnitID  
    record_type  
    message_content  
    create_time  
    status 可能取值为1,2,3,4 
      

  3.   

    简单看了下,感觉不向你说的那样要用什么自治事务和行级和语句级触发器你只是对A4创建触发器,来对A2和A3做动作,
    这里如果在A2往A3写资料的时候,用到A4的数据,那么你可以用:new或者:old关键字来获取啊
    不存在再去select * from A4;不知道你明白我的意思了没?
      

  4.   

    没太明白
    我是要在A2上做触发器,当A4发生变化时,通过A3找到A2相应的数据触发到B上。
      

  5.   

    奇怪?当A4发生变化时,你咋能触发A2表上的触发器呢?
    除非是在A2触发器中查询A4中的状态,再根据状态进行A2写到A3
    这样的话,也不难啊,就用:NEW或者:old来抓取相应的值。好了 我回家了,如果不行,把你需求再具体点,给点数据或者表结构,晚上回家又时间给你看看