【问题标题】:"ERROR IN PKG_PAYMENT AT LINE 280 -> ORA-38104: Columns referenced in the ON Clause cannot be updated: \"CANUMBER\"" [duplicate]“第 280 行的 PKG_PAYMENT 错误-> ORA-38104:ON 子句中引用的列无法更新:\”CANUMBER\”” [重复]
【发布时间】:2020-09-02 08:03:54
【问题描述】:
PROCEDURE INSERTORUPDATE_BILLINGACC(
  IN_CA_NUMBER    IN       VARCHAR2,  
  IN_BILL_CUST_ID        IN       VARCHAR2,
  OUT_RETURN_STATUS             OUT      VARCHAR2,
  OUT_RETURN_CODE               OUT      NUMBER,
  OUT_RETURN_MESSAGE            OUT      VARCHAR2
) AS
P_NAME VARCHAR2(200) := 'PKG_PAYMENT.INSERTORUPDATE_BILLINGACC';
P_ERR_LOCATION VARCHAR2(500);

BEGIN
OUT_RETURN_STATUS := 'SUCCESS';
    MERGE INTO SOME_BILLING_ACCOUNTS ABA USING DUAL ON (CANUMBER = IN_CA_NUMBER)
         WHEN NOT MATCHED THEN INSERT (CANUMBER, BILL_SYS_PREPARED, BILL_CUST_ID) 
           VALUES(IN_CA_NUMBER, 'O', IN_BILL_CUST_ID)
         WHEN MATCHED THEN UPDATE SET 
           CANUMBER = IN_CA_NUMBER, BILL_SYS_PREPARED = 'X', BILL_CUST_ID = IN_BILL_CUST_ID;
            COMMIT;
    OUT_RETURN_CODE := SQLCODE;  
    OUT_RETURN_MESSAGE := SQLERRM;
 
    EXCEPTION
       WHEN OTHERS THEN
        IF $$PLSQL_UNIT IS NOT NULL THEN
                        P_ERR_LOCATION := 'ERROR IN ' || $$PLSQL_UNIT || ' AT LINE ' || $$PLSQL_LINE;
        ELSE
                        P_ERR_LOCATION := 'ERROR IN ' || P_NAME;
        END IF;
        OUT_RETURN_STATUS := 'FAILURE';
        OUT_RETURN_CODE := SQLCODE;
        OUT_RETURN_MESSAGE :=  P_ERR_LOCATION || ' -> ' || SQLERRM;
        ROLLBACK;

END INSERTORUPDATE_BILLINGACC;

【问题讨论】:

    标签: oracle sql-merge


    【解决方案1】:

    该错误已经告诉您出了什么问题:您无法更新您在 ON 部分中使用的 MERGE 语句中的列。

    没有理由进行更新CANUMBER = IN_CA_NUMBER,因为您已经确定在 ON 部分是这种情况,因此只需删除 MERGE 语句的 UPDATE 部分的那部分即可。

    【讨论】:

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