Oracle“ORA-38104: 无法更新ON子句中引用的列”解决方式

今天在plsql中使用merge into更新字段时遇到了一个问题。

Oracle“ORA-38104: 无法更新ON子句中引用的列”解决方式_第1张图片

相关代码如下:

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

你可能感兴趣的:(Oracle“ORA-38104: 无法更新ON子句中引用的列”解决方式)