在表A上建立一个触发器,当修改表A中的某一条记录时触发,根据条件判断同时修改改表的另一条记录中的字段,开始认为很简单,但写好后执行会出现错误,问了相关人员他们说不能这样写,系统考虑出现死循环,但更新第1条记录时我可能会根据第一条记录的值去更新数据表A中的另一条记录,请大家想想办法,看能否实现,多谢!

解决方案 »

  1.   

    各位大师,快帮帮忙呀,这个问题比较急,SQL SERVER 2000是支持这种触发器递归模式的,只需要设置SQL SERVER的参数就好了,相信ORACLE也是可以的,望高手帮忙,谢谢啦
      

  2.   

    我正好写了一个,和你的情况和类似
    你可以参考一下
    数据库是oracle10g
    具体情况是当表sb_ckdpb的字段bill_state变成'1'的时候就把它字表sb_ckdxb的sl字段查询出来
    并和其子表相一一对应的另一表sb_rkdxb的sl情况更新另一表sb_rkdxb 的字段sl
    create or replace trigger wz_kcslliu_sb_ckdpb after update of bill_state on sb_ckdpb for each row
    declare
      slck number;
      slrk number;
    begin
    if updating then
       if :new.BILL_STATE='1' and :old.bill_state!='1' then
       for m in (select sbbh from sb_ckdxb where bh=:new.bh)
           loop
               select nvl(sl,0) into slck from sb_ckdxb where sbbh=m.sbbh;
               select nvl(sl,0) into slrk from sb_rkdxb where sbbm=m.sbbh;
               update sb_rkdxb set sysl=slrk-slck where sbbm=m.sbbh;
           end loop;
        end if;
    end if;      
    end wz_kcslliu_sb_ckdpb;
      

  3.   

    你更改的表不是创建存储过程的表,我的要求是:当创建存储过程的表的一行记录修改时,修改本表的另一行记录,相当于递归触发器,SQL Server支持ORACLE不只是否能实现,行触发器可能不行,只有通过行触发器和表级触发器结合使用,还在研究中,不知能否实现,希望高手指点,多谢!