问题描述
我正在尝试使用row_number函数进行合并(插入和更新),以便ID_TRANS字段是唯一值,其余字段应用某些条件。但是在执行时出现了右括号错误,值得一提的是,我修改并添加了括号,仍然没有解决。
MERGE INTO TBL_TRANSAC trans
USING (
SELECT ID_TRANS,TIT,BEN,BAN,CTA_EMI,CTA_REC,INST,TYPE_TRANS,TYPE_MOV,CONC,DATE_OPER,MONT,DIV,ID_CONT
FROM (
SELECT T1.*,ROW_NUMBER() OVER (PARTITION BY T1.ID_TRANS ORDER BY T1.ID_TRANS DESC)ENUMERADO
FROM (
SELECT
'speibco1_'||UPPER(REPLACE( AREA,' ',''))||
UPPER(REPLACE( FVALOR,''))||
UPPER(REPLACE( CLAVE_RASTREO,'')),BAN_EM_DES,REPLACE(UPPER(NO_TP_CTA_EMISOR),''),LTRIM(CTA_REC,'0'),'BAN ACTINVER','CTA_EXTER','SPEI ENTradA BCO',CONC_2,TO_DATE(TO_CHAR(FVALOR),'YYYY-MM-DD'),REPLACE(REPLACE(IMPORTE,'-','MXN','0')||'0999'
FROM (SELECT *
FROM IBM_I2.I2_SPEI WHERE REPLACE(NO_TP_CTA_EMISOR,'') IS NOT NULL
AND ID_OPERACION='0007'
AND ESTATUS='06'
AND CTA_REC NOT IN ('70000997','7909567'))
)
WHERE ENUMERADO=1
AND ID_TRANS IS NOT NULL
)SPEI
ON (
trans.ID_TRANS = SPEI.ID_TRANS
)
WHEN MATCHED THEN
UPDATE SET
ID_TRANS = SPEI.ID_TRANS,TIT = SPEI.TIT,BEN= SPEI.BEN,BAN=SPEI.BAN_EMISOR,CTA_EMI=SPEI.CTA_EMI,CTA_REC =SPEI.CTA_REC,INST= SPEI.INST,TYPE_TRANS=SPEI.TYPE_TRANS,TYPE_MOV=SPEI.TYPE_MOV,CONC=SPEI.CONC,DATE_OPER=SPEI.DATE_OPER,MONT=SPEI.MONT,DIV= SPEI.DIV,ID_CONT= SPEI.ID_CONT
WHEN NOT MATCHED THEN
INSERT (
ID_TRANS,ID_CONT
)
VALUES
(
SPEI.ID_TRANS,SPEI.TIT,SPEI.BEN,SPEI.BAN_EMISOR,SPEI.CTA_EMI,SPEI.CTA_REC,SPEI.INST,SPEI.TYPE_TRANS,SPEI.TYPE_MOV,SPEI.CONC,SPEI.DATE_OPER,SPEI.MONT,SPEI.DIV,SPEI.ID_CONT
);
标记错误,即在 ID_TRANS 后缺少右父母且 ID_TRANS 不为 NULL
仍然放置父母。
解决方法
似乎缺少右括号,这里:
)) --> here; should be 2,not only 1
WHERE ENUMERADO=1
AND ID_TRANS IS NOT NULL
,
为它们中的每一个加上括号和别名,以及在 USING 中调用的字段放置别名,然后就可以了。
FROM (SELECT *
FROM IBM_I2.I2_SPEI WHERE REPLACE(NO_TP_CTA_EMISOR,' ','') IS NOT NULL
AND ID_OPERACION='0007'
AND ESTATUS='06'
AND CTA_REC NOT IN ('70000997','7909567')
)
)T1
)T2
WHERE ENUMERADO=1
AND ID_TRANS IS NOT NULL
)SPEI
ON (
trans.ID_TRANS = SPEI.C1_ID_TRANS
)