Oracle合并语句中的多列错误
我试图通过Merge语句在oracle中进行一次Upsert。 现在我要合并到的表有一个组合的主, 因此,我创建了如下查询:Oracle合并语句中的多列错误,oracle,merge,Oracle,Merge,我试图通过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', '
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")
有没有办法让这一切顺利
谢谢,ORA-38104:ON子句中引用的列无法更新:CC.CC\u 不能更新on子句中用于筛选的列,只需从更新部分删除此列即可
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');
ORA-38104:无法更新ON子句中引用的列:CC.CC_TRIMESTER 不能更新on子句中用于筛选的列,只需从更新部分删除此列即可
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');
就这样。非常感谢。就这样。非常感谢。