【问题标题】:SQL Error: ORA-38104: Columns referenced in the ON Clause cannot be updatedSQL 错误:ORA-38104:不能更新 ON 子句中引用的列
【发布时间】:2021-08-31 03:00:20
【问题描述】:
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 子句中使用列atm.status,因此无法更改UPDATE子句。您可以将IS NULL 条件移动到UPDATE 子句中。

标签: oracle oracle11g oracle10g sql-merge


【解决方案1】:

您在 ON 子句中使用列 atm.status,因此无法更改 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;

【讨论】:

    【解决方案2】:

    正如它所说,您不能更新 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
    

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 2016-05-02
      相关资源
      最近更新 更多