程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle多表級聯更新詳解

Oracle多表級聯更新詳解

編輯:關於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 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;

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved