湛蓝之海 发表于 2022-1-28 11:41:20

Oracle多表级联更新详解

用游标实现,我觉得绝对这种方法比较安全的。
--首先定一个游标把需要用到的一些数据存放到游标中:

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 fromsk swhere s.nd = '2008-2009' group by s.bh) a on t2.bh_=a.bh
wheret3.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;


https://www.uoften.com/dbs/oracle/20180415/72950.html
页: [1]
查看完整版本: Oracle多表级联更新详解