评论

收藏

[Oracle] Oracle多表级联更新详解

数据库 数据库 发布于:2022-01-28 11:41 | 阅读数:309 | 评论:0

用游标实现,我觉得绝对这种方法比较安全的。
--首先定一个游标把需要用到的一些数据存放到游标中:
declare 
  CURSOR D_CURSOR_CUS_INFO IS
  select t3.id_       as id_,
       t3.owe_money_  as owe_money_,
       a.heatingArea  as heating_area_
  from T_CUS_OWE_MONEY_2 t2
  left join T_CUS_OWE_MONEY_3 t3 on t2.id_= t3.id_
  left join (select s.bh,  sum(
       case 
         when s.stkbz='0' then nvl(s.mj,0)
         when s.stkbz='1' then 0-nvl(s.mj,0)
       end 
    ) as heatingArea from  sk s  where s.nd = '2008-2009' group by s.bh) a on t2.bh_=a.bh
  where  t3.owe_money_- t2.owe_money_  = a.heatingArea*5 and t3.OWE_MONEY_ > 0;
--然后循环游标对数据进行更新:
begin
    FOR everyRow IN D_CURSOR_CUS_INFO
    loop 
     update T_CUS_YEAR_STATUS t
       set t.HEATING_AREA_ = everyRow.HEATING_AREA_,
         t.OWE_MONEY_  = everyRow.owe_money_
       where t.YEAR_ = '2008-2009'
           and t.id_ = everyRow.id_;
     end loop;
    commit;
end;

关注下面的标签,发现更多相似文章