DB2 在指定SQL数据更新语句的上下文中 不允许FROM子句的SQL数据更新语句

在实现存储过程中,遇到将更新后的数据输出的需求时,遇到了SQL更新语句中不允许FROM子句的问题。通过调整SQL语句结构,使用变量来存储更新后的数据,并最终插入到目标表中,成功解决了这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写一个存储过程的时候,遇到一个需求是:将更新后的数据输出。

insert into session.results(personid,personcode,isactive)
select personid,personcode,isactive from new table(
		update g_personinfo(nickname,provincename,cityname,countyname,sex,money,headimgurl) = (P_NICKNAME,P_PROVINCE,P_CITY,P_COUNTY,P_SEX,money+v_integration,P_HEADIMGURL) where personid = v_personId
);

然后报错:在指定SQL数据更新语句的上下文中 不允许FROM子句的SQL数据更新语句

一开始以为select语句有问题,单独拿出来执行一遍,发现数据是对的。

后来发现一加上insert就报错。

暂时的解决办法:

select personid,personcode,isactive into v_personId,v_personCode,v_isActive from new table(
			update g_personinfo set (nickname,provincename,cityname,countyname,sex,headimgurl) = (P_NICKNAME,P_PROVINCE,P_CITY,P_COUNTY,P_SEX,P_HEADIMGURL) where personid = v_personId
		);

将获取的值赋值给变量,再将值插入到临时表中去。

可以依然不明白第一种写法为啥会报错。幸好还是单条语句,不然还真不知道这种写法要如何处理。

当然还可以把这句sql拆开分成两个步骤,但是不想那样做。记录一下,知道了解决办法再来解决吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值