SQL 错误:ORA-38104:无法更新 ON 子句中引用的列

问题描述

MERGE /*+ GATHER_PLAN_STATISTICS*/
     INTO ATM_REQUEST ATM
    USING ATM_STATUS_VIEW ST
       ON (    ATM.accountno = ST.accountno
           AND atm.status IS NULL
           AND atm.remarks IS NULL)
WHEN MATCHED
THEN
   UPDATE SET ATM.STATUS = ST.STATUS,ATM.REMARKS = ST.REMARKS;

出现以下错误,谁能帮我解决这个问题。

Error at Command Line : 3 Column : 35
Error report -
sql Error: ORA-38104: Columns referenced in the ON Clause cannot be updated: "ATM"."STATUS"

解决方法

正如它所说,您不能更新 ON 子句中引用的列。

也许您打算这样做:

MERGE /*+ GATHER_PLAN_STATISTICS*/
     INTO ATM_REQUEST ATM
    USING ATM_STATUS_VIEW ST
       ON (ATM.accountno = ST.accountno)
WHEN MATCHED
THEN
   UPDATE SET ATM.STATUS = ST.STATUS,ATM.REMARKS = ST.REMARKS
          WHERE     atm.status IS NULL
                AND atm.remarks IS NULL
,

您在 atm.status 子句中使用了列 ON,因此无法更改 UPDATE 子句。您可以将 IS NULL 条件移动到 UPDATE 子句中。

MERGE /*+ GATHER_PLAN_STATISTICS*/
     INTO atm_request atm
    USING atm_status_view st
       ON (atm.accountno = st.accountno)
WHEN MATCHED
THEN
   UPDATE SET atm.status = st.status,atm.remarks = st.remarks
          WHERE     atm.status IS NULL
                AND atm.remarks IS NULL;