我试图从下表更新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';
但它给了我以下错误:
错误报告- SQL : ORA-38104: ON子句中引用的列不能更新:"S"."BUNDLE_NAME“38104。00000 -“ON子句中引用的列不能更新:%s”*原因:更新集的LHS包含ON子句中引用的列**
-我的要求是我只想使用合并语句进行更新--
发布于 2017-11-23 09:20:47
如果要更新bundle_id
子句,则不能在on
子句中使用它。由于它是一个固定值,所以可以将其放在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';
发布于 2019-01-02 15:55:13
有几种可能的解决办法可以用来胜过解析器。,至少在甲骨文18c之前。其中之一是使用额外的虚拟列将谓词包装在行值表达式谓词中:
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';
https://stackoverflow.com/questions/47451198
复制相似问题