oracle关联update犯错

Update card a
Set
(card_limit,open_date)=
(Select b.card_limit,b.issue_date From etl_cardinfo b Where a.card_number = b.card_no)
Where Exists (Select 1 From card a,etl_cardinfo b Where a.card_number = b.card_no)

总是报错说:ora-01407:can't set card.card_limit to null
于是改为
Update card a
Set open_date =(Select issue_date From etl_cardinfo b Where a.card_number = b.card_no)
,
card_limit=nvl(Select b.card_limit From etl_cardinfo b Where a.card_number = b.card_no,a.card_limit)
Where Exists (Select 1 From card a,etl_cardinfo b Where a.card_number = b.card_no)

现在报错:ora-00936:missing expression。干脆语法错误了。
看了半天后才发现,都是犯了两个愚蠢的小错误。
正确的写法是:

Update card a
Set
(card_limit,open_date)=
(Select b.card_limit,b.issue_date From etl_cardinfo b Where a.card_number = b.card_no)
Where Exists (Select 1 From etl_cardinfo b Where a.card_number = b.card_no)
[color=red]exists里面不用card a[/color],如果是from a,b的话就不再是是子查询了,要么是存在要么是不存在,和where 1=1和where 1<>1一样了。
第二个的写法是:

Update card a
Set open_date =(Select issue_date From etl_cardinfo b Where a.card_number = b.card_no),
card_limit=
nvl((Select b.card_limit From etl_cardinfo b
Where a.card_number = b.card_no),a.card_limit)
Where Exists (Select 1 From etl_cardinfo b Where a.card_number = b.card_no)
[color=red]nvl里面的select * from X 必须括号起来[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值