oracle 多表更新

--标准update语法
UPDATE SPSJJH SPS
   SET (JZ, PSKS, PSZL) =
       (SELECT JZ, PSKS, PSZL FROM KCT WHERE SPTM = SPS.TM)
 WHERE  exists (select 1 from KCT where SPTM = SPS.TM )


-- inline view更新法
update (select a.JZ,
               a.PSKS,
               a.PSZL,
               b.JZ   as new_JZ,
               b.PSKS as new_PSKS,
               b.PSZL as new_PSZL
          from SPSJJH a, KCT b
         where b.SPTM = a.TM)
   set JZ = new_JZ, PSKS = new_PSKS, PSZL = new_PSZL
   
--快速游标更新法


begin
for cr in (select a.rowid,b.JZ ,b.PSKS, b.PSZL from SPSJJH a,KCT b
where a.TM=b.SPTM) 
loop
update SPSJJH set JZ=cr.JZ,PSKS = cr.PSKS,PSZL = cr.PSZL where
rowid = cr.rowid;
endloop;
end;


--merge更新法
merge into SPSJJH a
using KCT b
on (a.TM=b.SPTM)
when matched then update set a.JZ=b.JZ,a.PSKS = b.PSKS,a.PSZL = b.PSZL


/*
标准update语法
单表更新或较简单的语句采用使用此方案更优。


inline view更新法
两表关联且被更新表通过关联表主键关联的,采用此方案更优。


merge更新法
两表关联且被更新表不是通过关联表主键关联的,采用此方案更优。


快速游标更新法
多表关联且逻辑复杂的,采用此方案更优。
*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值