› Fóruns › Banco de dados Oracle › Erro na execução de MERGE › Responder a: Erro na execução de MERGE
=> agora sim, o MERGE :
SCOTT@xepdb1::CONTAINER=XEPDB1> MERGE INTO SGI5_TAB_CUS_RET_RAT X
2 USING(SELECT
3 A.CUS_FAM as FAM,
4 A.CUS_DTA as DMO_INI,
5 NVL( LEAD(A.CUS_DTA,1)
6 OVER (PARTITION BY A.CUS_FAM ORDER BY A.CUS_FAM, A.CUS_DTA)
7 ,
8 TRUNC(SYSDATE)
9 ) as DMO_FIN,
10 A.CUS_VLT_RTO as VLT_RTO,
11 A.CUS_VLU_RTO as VLU_RTO,
12 A.CUS_VLT_RMO as VLT_RMO,
13 A.CUS_VLU_RMO as VLU_RMO
14 FROM SGI5_TAB_CUS_REP_RAT A
15 WHERE A.CUS_DTA >= to_date(’01/01/1980′, ‘dd/mm/yyyy’) — eu não tenho a variável V_DTA, uso valor fixo
16 ) Y
17 ON
18 ( X.CUS_FAM = Y.FAM
19 AND X.CUS_DMO BETWEEN Y.DMO_INI AND Y.DMO_FIN
20 )
21 WHEN MATCHED THEN
22 UPDATE SET X.CUS_VLT_RTO = Y.VLT_RTO,
23 X.CUS_VLU_RTO = Y.VLU_RTO,
24 X.CUS_VLT_RMO = Y.VLT_RMO,
25 X.CUS_VLU_RMO = Y.VLU_RMO;
48 linhas mescladas.
SCOTT@xepdb1::CONTAINER=XEPDB1>
===>> PERFEITO, Suave como o éter, Absolutamente Erro nenhum, tá ok ???? Isso COMPROVA que OU é um erro no seu código real , não presente nessa versão simplificada, OU é pau/limitação da tua tool de front-end ao processar o MERGE, OU é essa variável V_DTA que eu já apontei acima, OU vc tem mais código “oculto” aí que vc não nos motrou E que vc TEM QUE DEBUGAR, tá certo ???
E só comentando, infelizmente o WordPress vai bagunçar TUDO, mas na hora de analisar/testar, eu coloquei SIM meu código SQL (tanto a query isolada QUANTO o MERGE) Alinhado nas colunas certas, com o fecha parêntesis na mesma posição do abre parêntesis, dei uns espaços para que cada coluna e cada ALIAS de coluna começassem na mesma coluna – isso AJUDA DEMAIS a se compreender qual função tá recebendo quais argumentos, EM ESPECIAL no caso desse NVL que englobla parêntesis do LEAD e do OVER , é MUITO FÁCIL se perder se não fizermos isso…
Abraços,
Chiappa