Pular para o conteúdo

Fóruns Banco de dados Oracle Erro na execução de MERGE Responder a: Erro na execução de MERGE

#168318
Avatar photoJosé Laurindo Chiappa
Moderador

    Então: PRIMEIRO os dois SELECTs absolutamente não são os mesmos, no SQL que roda ok isolado vc escreveu :

    SELECT A.CUS_FAM FAM,
    A.CUS_DTA DMO_INI,
    NVL(LEAD(A.CUS_DTA,1) OVER ….

    ENQUANTO QUE no SQL do MERGE , vc escreveu :

    SELECT A.CUS_FAM FAM,
    A.CUS_DTA DMO_INI,
    TO_DATE(NVL(TO_CHAR(LEAD(A.CUS_DTA,1) OVER…..

    ==> Não São Iguais, não sr, esse TO_DATE de TO_CHAR muda-os Completamente ….

    Segundo, Como eu já tinha dito, olhando esse código SQL isolado, sem estar num bloco :

    MERGE INTO SGI5_TAB_CUS_RET_RAT X
    USING(
    SELECT A.CUS_FAM FAM,
    A.CUS_DTA DMO_INI,
    TO_DATE(NVL(TO_CHAR(LEAD(A.CUS_DTA,1) OVER (PARTITION BY A.CUS_FAM
    ORDER BY A.CUS_FAM,
    A.CUS_DTA) – 1,’DD/MM/YYYY’),
    TO_CHAR(TRUNC(SYSDATE),’DD/MM/YYYY’)),
    ‘DD/MM/YYYY’) DMO_FIN,
    A.CUS_VLT_RTO VLT_RTO,
    A.CUS_VLU_RTO VLU_RTO,
    A.CUS_VLT_RMO VLT_RMO,
    A.CUS_VLU_RMO VLU_RMO
    FROM SGI5_TAB_CUS_REP_RAT A
    WHERE A.CUS_DTA >= V_DTA
    ) Y ON (X.CUS_FAM = Y.FAM AND
    X.CUS_DMO BETWEEN Y.DMO_INI AND Y.DMO_FIN)
    WHEN MATCHED THEN
    UPDATE SET X.CUS_VLT_RTO = Y.VLT_RTO,
    X.CUS_VLU_RTO = Y.VLU_RTO,
    X.CUS_VLT_RMO = Y.VLT_RMO,
    X.CUS_VLU_RMO = Y.VLU_RMO;

    *** PERCEBA ** que esses identificador V_DTA ao que parece (julgando pelos CREATEs) ** não existe ** dentro de nenhuma das tabelas, ENTÃO o SQL vai considerar que isso é uma VARIÁVEL… Como essa variável NÂO FOI CRIADA antes de rodar o SQL isoladamente ao que vejo, COMO É que vc está conseguindo rodar SEM receber um erro :

    Erro de SQL: ORA-00904: “V_DATA”: identificador inválido

    pela frente ??? Alguma coisa está MUITO errada, Alguma coisa vc está OCULTANDO da gente….