【发布时间】:2013-12-13 12:20:35
【问题描述】:
我正在尝试通过 Merge 语句在 oracle 中执行 Upsert。 现在我要合并的表有一个组合的主表, 所以我像这样创建了我的查询:
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”
这显然是因为 ON 子句有不止一列;由于组合主键,这在我的情况下是必须的:
CONSTRAINT "CONTINGENT_COMMISSION_PK" PRIMARY KEY ("CC_PROD_USERID", "CC_TRIMESTER", "CC_YEAR")
有没有办法让这个工作?
谢谢,
【问题讨论】: