举例:当给T1表某雅间INSERT订餐费时同时通过触发器给该表追加两条或多条费用:
餐具费、空调费等等。说明:T1表为费用清单明细表 

解决方案 »

  1.   

    insert触发,完了还insert 我勒个去, 你是想死循环吗
    给你个建议:
    1、改前台应用,把这两条记录弄到前台做
    2、新建一个表T2,当insert T1 表的时候,把你想要的记录插入到 T2里头
       然后统一在一个没有业务的时间点,禁用了T1的触发器,然后把T2表里的数据刷进T1
      

  2.   

    可能是我的举例不准确,需要解决的问题是,当给T1表INSERT记录时同时通过触发器给该表追加两条或多条记录,我期望的效果是能否在行前触发器时将一条当前记录分裂成多条记录。
      

  3.   

    oracle的触发器是做不到对原表加记录的,mssql才可以这样的需求你可以在程序中实现,为何非要在触发器中做呢,不懂,呵呵
      

  4.   

    这样只能:
    1、把你的基表T1改名为 T2
    2、建一个视图 T1 as select * from T2
    3、在视图T1上建一个 instead of 触发器,达到你想要的效果之所以做第一步和第二步,为了把对表T1的操作转换为 对视图T1的做错,但实际上基表没区别,只不过改名了
    而且这样不用改前台程序
    存在的缺陷有待观察,暂未想到
      

  5.   

    instead of 触发器顾名思义,就是替代触发器
    整个触发器是建在 视图T1上的instead of trigger 生效当数据库捕捉到 对视图 T1 的insert操作的时候,替代触发器起作用然后根据你的规则 把数据“分裂” 转换成3个sql语句(目前看是3条,当然可以更多)
    直接 insert 到T2 中请注意 instead of trigger 建在 T1上(T1 是视图)
    trgger 内部 把一条对T1的insert 操作转换成 3条对T2 的insert 操作
    转换之后 系统只执行 对T2 的三条insert操纵,原来前程序发出的对T1 的insert操作 被“替代”