oracle - 使用合并更新列时出现错误 : ORA-38104

标签 oracle merge

我正在尝试更新下表中的 BUNDLE_NAME, 我的查询是:

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';

但它给了我以下错误:

Error report - SQL Error: ORA-38104: Columns referenced in the ON Clause cannot be updated: "S"."BUNDLE_NAME" 38104. 00000 - "Columns referenced in the ON Clause cannot be updated: %s" *Cause: LHS of UPDATE SET contains the columns referenced in the ON Clause**

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

最佳答案

如果您尝试更新它,则不能在 on 子句中使用 bundle_id。因为它是一个固定值,所以您可以将它放在 where 子句中:

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';

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

UPDATE SOURCE S
SET S.BUNDLE_NAME = 'EPI'
WHERE S.KEY = 'MANIFEST_ID'
AND S.BUNDLE_NAME = 'CART';

关于oracle - 使用合并更新列时出现错误 : ORA-38104,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47451198/

相关文章:

svn - 在 Subversion 中尝试撤消更改示例时发生冲突

javascript - 查询SQL时,传递到查询的时间比我设置的时间少了2小时。为什么?

sql - 在utl_http.req中发送长度为32000的CLOB数据会抛出ORA :06052 POST method

java - 无法访问存储过程的 OUT 参数

java - 甲骨文一致性 : How to set the timeout on an invoke call in a replicated cache?

Git:如何防止特定提交被 merge 到另一个分支?

Python 无法识别重复项

sql - 更新 SELECT 语句的结果

r - 在 R 中合并两个不同大小的 dgCMatrix 稀疏矩阵

r - 在多个条件下合并 R 中的数据库,缺失值 (NA) 遍布各处