Oracle“ORA-38104: 无法更新ON子句中引用的列”解决方式
今天在plsql中使用merge into更新字段时遇到了一个问题。
相关代码如下:
MERGE INTO TABLE1 A USING (SELECT T.ID, T.NEW_CORE_SIZE FROM TABLE2 T) B ON (A.ID = B.ID AND A.CORE_SIZE IS NULL) WHEN MATCHED THEN UPDATE SET A.CORE_SIZE = B.NEW_CORE_SIZE;
这里请注意,在ON中出现的字段,不可以在WHEN MATCHED THEN中更新,所以无法更新A.CORE_SIZE字段
正确的写法如下:
MERGE INTO TABLE1 A USING (SELECT T.ID, T.NEW_CORE_SIZE FROM TABLE2 T) B ON (A.ID = B.ID) WHEN MATCHED THEN UPDATE SET A.CORE_SIZE = DECODE(A.CORE_SIZE,null,B.NEW_CORE_SIZE,A.CORE_SIZE);