当前位置: 代码迷 >> Oracle开发 >> 请教这个要求用存储过程怎么实现
  详细解决方案

请教这个要求用存储过程怎么实现

热度:94   发布时间:2016-04-24 06:43:10.0
请问这个要求用存储过程如何实现?
一个系统中,有三个业务数据表,每个表数据级别都是千万级,表结构如下:
TableA(userid,time,fee),
TableB(userid,time),  
TableC(userid,fee)
三个表是通过userid关联,要求用TableB表的time值,TableC表的fee值更新TableA表的相应字段,请问用存储过程如何实现?
------解决方案--------------------
用游标,很简单的,两三分钟的事~~
------解决方案--------------------

merge into TableA x using
(select a.userid,a.time,b.fee from TableB a left join TableC b on a.userid = b.userid
union
select c.userid,d.time,c.fee from TableC c ,TableB d where c.userid = d.userid) e
on x.userid = e.userid
when matched then update set x.time = e.time , x.fee = e.fee 
when not matched then insert (userid,time,fee) values (e.userid,e.time,e.fee)

------解决方案--------------------
用循环的话试试这个:
BEGIN
  FOR CUR_TableA IN (SELECT A.userid, B.time, C.fee
                       FROM TableA A
                       LEFT JOIN TableB B
                         ON A.userid = B.userid
                       LEFT JOIN TableC c
                         ON a.userid = c.userid) LOOP
    UPDATE TableA
       SET time = CUR_TableA.time, fee = CUR_TableA.fee
     WHERE userid = CUR_TableA.userid;
  END LOOP;
END;
  相关解决方案