在写一个存储过程的时候,遇到一个需求是:将更新后的数据输出。
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拆开分成两个步骤,但是不想那样做。记录一下,知道了解决办法再来解决吧!