oracle表关联语法,Oracle多表关联更新的语法

今天给客户批量更新数据,由于是oracle数据库,oracle的多表更新语法和 sql server/sybase的语法不一样,

于是就把几年前搜来的oracle多表更新语法copy了过来

Oracel 示例:

update landleveldata a

set (a.gqdltks, a.bztks)=

(select b.gqdltks, b.bztks   from gdqlpj b

where a.GEO_Code=b.lxqdm)

改好后

update lswlzd  a

set a.lswlzd_wlmc=

(select b.newmc   from kgcwltz081120 b

where a.lswlzd_wlbh=b.wlbh)

,在pl/sql中一执行,结果,报错误ora-01407,无法更新lc0349999.lswlzd.lswlzd_wlmc为null,

一开始我以为,kgcwltz081120 这个对照表有问题,结果,检查了一下,没有为null 的,后来,搜了一下网上的资料,发现是多表更新语法写的有问题, 以上语法是 是将   表   lswlzd    中   lswlz d_wlmc 列   的值全部更新,更新的值为:     select b.newmc   from kgcwltz081120 b   where a.lswlzd_wlbh=b.wlbh  (没有对应上的更新为null.)

这也就是那个ora-01407错误的来历。

正确的oracle多表更新的语法为:

update lswlzd  a

set a.lswlzd_wlmc=

(select b.newmc   from kgcwltz081120 b

where a.lswlzd_wlbh=b.wlbh)

where exists

(select 1

from kgcwltz081120 b

where  a.lswlzd_wlbh=b.wlbh)

下边的语句是建立KGCWLTZ081120 这个对照表的语句:

CREATE TABLE LC0349999.KGCWLTZ081120

(

WLBH  VARCHAR2(30)  NOT NULL,

OLDMC VARCHAR2(200) NOT NULL,

NEWMC VARCHAR2(200) NOT NULL

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值