首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用merge更新列时,我得到了错误: ORA-38104

在使用merge更新列时,我得到了错误: ORA-38104
EN

Stack Overflow用户
提问于 2017-11-23 08:54:33
回答 2查看 2.2K关注 0票数 3

我试图从下表更新BUNDLE_NAME,我的查询是:

代码语言:javascript
运行
复制
MERGE INTO SOURCE S USING 
(SELECT 'MANIFEST_ID' KEY,'CART' BUNDLE_NAME FROM DUAL) D
ON(S.KEY = D.KEY AND S.BUNDLE_NAME = D.BUNDLE_NAME)
WHEN MATCHED THEN UPDATE
SET BUNDLE_NAME = 'EPI';

但它给了我以下错误:

错误报告- SQL : ORA-38104: ON子句中引用的列不能更新:"S"."BUNDLE_NAME“38104。00000 -“ON子句中引用的列不能更新:%s”*原因:更新集的LHS包含ON子句中引用的列**

-我的要求是我只想使用合并语句进行更新--

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-23 09:20:47

如果要更新bundle_id子句,则不能在on子句中使用它。由于它是一个固定值,所以可以将其放在where子句中:

代码语言:javascript
运行
复制
MERGE INTO SOURCE S
USING (SELECT 'MANIFEST_ID' KEY FROM DUAL) D
ON (S.KEY = D.KEY)
WHEN MATCHED THEN UPDATE
SET BUNDLE_NAME = 'EPI'
WHERE S.BUNDLE_NAME = 'CART';

但是你不需要合并,你可以做一个简单的更新:

代码语言:javascript
运行
复制
UPDATE SOURCE S
SET S.BUNDLE_NAME = 'EPI'
WHERE S.KEY = 'MANIFEST_ID'
AND S.BUNDLE_NAME = 'CART';
票数 3
EN

Stack Overflow用户

发布于 2019-01-02 15:55:13

有几种可能的解决办法可以用来胜过解析器。,至少在甲骨文18c之前。其中之一是使用额外的虚拟列将谓词包装在行值表达式谓词中:

代码语言:javascript
运行
复制
MERGE INTO SOURCE S USING 
(SELECT 'MANIFEST_ID' KEY,'CART' BUNDLE_NAME FROM DUAL) D
ON(S.KEY = D.KEY AND (S.BUNDLE_NAME, 'dummy') = ((D.BUNDLE_NAME, 'dummy')))
WHEN MATCHED THEN UPDATE
SET BUNDLE_NAME = 'EPI';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47451198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档