2013-11-27 2 views
1

병합 명령문을 통해 Oracle에서 Upsert를 수행하려고합니다. 는 지금은 합성 주를 가지고에 병합 노력하고있어 테이블은 그래서 지금처럼 내 쿼리를 creat4ed :Oracle Merge 문에 여러 열 오류가 발생했습니다.

MERGE INTO CONTINGENT_COMMISSION CC USING 
    (SELECT 
     'ad_adavila' CC_PROD_USERID, 
     to_number('42.22', '999,999,999.99') CC_COMM_PERCENT, 
     to_number('217,904.08', '999,999,999.99') CC_PREMIUM, 
     '2' CC_TRIMESTER, 
     '2013' CC_YEAR 
    FROM DUAL) SRC 
    ON (CC.CC_PROD_USERID || CC.CC_TRIMESTER || CC.CC_YEAR = SRC.CC_PROD_USERID || SRC.CC_TRIMESTER || SRC.CC_YEAR) 
WHEN MATCHED THEN 
    UPDATE 
     SET CC.CC_COMM_PERCENT = to_number('42.22', '999,999,999.99'), 
      CC.CC_PREMIUM = to_number('217,904.08', '999,999,999.99'), 
      CC.CC_TRIMESTER = '2', 
      CC.CC_YEAR = '2013' 
WHEN NOT MATCHED THEN  
    INSERT 
     (CC_PROD_USERID,CC_COMM_PERCENT,CC_PREMIUM,CC_TRIMESTER,CC_YEAR) 
     VALUES 
     ('ad_adavila',to_number('42.22', '999,999,999.99'),to_number('217,904.08', '999,999,999.99'),'2','2013'); 

을 나는이 쿼리를 실행하려고 할 때마다 이제 다음과 같은 오류를 받고 있어요.

ORA-38104 : ON 절에 참조 된 열은 업데이트 할 수 없습니다 : "CC" "CC_TRIMESTER"Aparently이 ON 절은 둘 이상의 열이 있기 때문에 발생합니다

;. 그것은 내 기본 구성 키로 인해 필연적입니다 :

CONSTRAINT "CONTINGENT_COMMISSION_PK" PRIMARY KEY ("CC_PROD_USERID", "CC_TRIMESTER", "CC_YEAR") 

어쨌든이 작업을 수행 할 수 있습니까? ON 절에 참조 된 열은 업데이트 할 수 없습니다 :. 당신이 절에 필터가 사용 열을 업데이트 할 수 없습니다
"CC" "CC_TRIMESTER는"단지

답변

8

ORA-38104 감사합니다 업데이트 항목에서이 열을 제거하십시오.

merge into CONTINGENT_COMMISSION CC 
using (select 'ad_adavila' CC_PROD_USERID, 
       to_number('42.22', '999,999,999.99') CC_COMM_PERCENT, 
       to_number('217,904.08', '999,999,999.99') CC_PREMIUM, 
       '2' CC_TRIMESTER, 
       '2013' CC_YEAR 
     from DUAL) SRC 
on (CC.CC_PROD_USERID || CC.CC_TRIMESTER || CC.CC_YEAR = SRC.CC_PROD_USERID || SRC.CC_TRIMESTER || SRC.CC_YEAR) 
when matched then 
    update 
     set CC.CC_COMM_PERCENT = to_number('42.22', '999,999,999.99'), 
      CC.CC_PREMIUM  = to_number('217,904.08', '999,999,999.99') 
when not matched then 
    insert 
     (CC_PROD_USERID, CC_COMM_PERCENT, CC_PREMIUM, CC_TRIMESTER, CC_YEAR) 
    values 
     ('ad_adavila', to_number('42.22', '999,999,999.99'), to_number('217,904.08', '999,999,999.99'), '2', '2013'); 
+0

그게 전부입니다. 고맙습니다! – sonar

관련 문제