Pular para o conteúdo
  • Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 7 anos, 10 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #108598
    Avatar de Oswaldo JúniorOswaldo Júnior
    Participante

      Saudações amigos, eu estou com uma dificuldade no seguinte… Estou gerando um arquivo de integração e parte dos dados são pertencentes a um case que eu criei. separadamente tudo funciona, mas quando eu uso o || ou concat, o CASE não funciona. Segue o Script para melhor compreensão.

      SELECT DISTINCT (
      CAB.CODEMP
      ||’|0|’
      ||CAB.DTMOV
      ||’|’
      ||(CASE
      WHEN TOP.CODCFO_ENTRADA IN (1102,1403,1118,1113) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2102,2403,2113) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
      WHEN TOP.CODCFO_ENTRADA IN (1202,1411) THEN ‘102’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2202,2411) THEN ‘102’
      WHEN TOP.CODCFO_ENTRADA IN (1910,1911) THEN ‘386’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2910,2911) THEN ‘386’
      WHEN TOP.CODCFO_ENTRADA IN (1152,1409,1557,1209) THEN ‘128’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2152,2409,2209) THEN ‘128’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2353) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
      WHEN TOP.CODCFO_ENTRADA IN (1556) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2556) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
      WHEN TOP.CODCFO_ENTRADA IN (1917) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2917) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
      WHEN TOP.CODCFO_ENTRADA IN (1353) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
      END)
      ||’|’
      ||(CASE
      WHEN TOP.CODCFO_ENTRADA IN (1102,1403,1118,1113) THEN ‘314’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2102,2403,2113) THEN ‘314’
      WHEN TOP.CODCFO_ENTRADA IN (1202,1411) THEN ‘308’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2202,2411) THEN ‘308’
      WHEN TOP.CODCFO_ENTRADA IN (1910,1911) THEN ‘315’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2910,2911) THEN ‘315’
      WHEN TOP.CODCFO_ENTRADA IN (1152,1409,1557,1209) THEN ‘318’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2152,2409,2209) THEN ‘318’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2353) THEN ‘316’
      WHEN TOP.CODCFO_ENTRADA IN (1556) THEN ‘17383’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2556) THEN ‘17383’
      WHEN TOP.CODCFO_ENTRADA IN (1917) THEN ‘321’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2917) THEN ‘321’
      WHEN TOP.CODCFO_ENTRADA IN (1353) THEN ‘5569’
      END)
      ||’|’
      ||TO_CHAR(CAB.VLRNOTA, ‘FM999999.99′)
      ||’|’
      ||(CASE
      WHEN TOP.CODCFO_ENTRADA IN (1102,1403,1118,1113) THEN ‘91.25’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2102,2403,2113) THEN ‘91.25’
      WHEN TOP.CODCFO_ENTRADA IN (1202,1411) THEN ‘90.06’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2202,2411) THEN ‘90.06’
      WHEN TOP.CODCFO_ENTRADA IN (1910,1911) THEN ‘91.31’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2910,2911) THEN ‘91.31’
      WHEN TOP.CODCFO_ENTRADA IN (1152,1409,1557,1209) THEN ‘91.26’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2152,2409,2209) THEN ‘91.26’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2353) THEN ‘91.27’
      WHEN TOP.CODCFO_ENTRADA IN (1556) THEN ‘91.28’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2556) THEN ‘91.28’
      WHEN TOP.CODCFO_ENTRADA IN (1917) THEN ‘91.29’
      WHEN TOP.CODCFO_ENTRADA_FORA IN (2917) THEN ‘91.29’
      WHEN TOP.CODCFO_ENTRADA IN (1353) THEN ‘91.27’
      END)
      ||’|’
      ||CAB.NUMNOTA) “EXPORTACAO DEVOLUÇÃO”
      FROM TGFCAB CAB, TGFTOP TOP
      WHERE CAB.CODEMP=1
      AND CAB.CODTIPOPER=TOP.CODTIPOPER
      AND CAB.STATUSNFE = ‘A’
      AND CAB.STATUSNOTA = ‘L’
      AND CAB.TIPMOV IN (‘E’)
      AND TO_CHAR(CAB.DTFATUR,’MM/YYYY’) BETWEEN ’01/2016′ AND ’12/2016′

      O resultado sai :
      1|0|01/11/16|||84.87||3225

      Quando deveria sair
      1|0|06/05/16|1399|317|1444.26|90.07|270

      Ou seja onde tem case falta retornar:
      1|0|01/11/16|falta_case|falta_case|84.87|falta_case|3225

      #108605
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Opa, blz ? Então, eu tenho um timespan de atenção bem curto, passou de uma dúzia de linhas já fica difícil de acompanhar, mas olhando por cima não vejo nenhum erro flagrante de sintaxe, E sei por experiência que não há registro de ABSOLUTAMENTE NENHUM BUG no RDBMS Oracle de CASE junto com operador de concatenação….
        Assim sendo, só sobra a possibilidade de falha nos seus dados, que pode ser (entre outros) :

        a) coluna com conteúdo NULL : no RDBMS Oracle, a lógica tri-valorada é levada a ferro e fogo, então um coluna NULL *** não ** é igual a nada, ** Não ** é diferente de nada, ** Não ** está IN lista nenhuma… NULL é NULL…. Assim, se em qualquer um dos seus registros qualquer das colunas que vc compara no CASE vier com valor NULO, não vai ser verdadeira ** NENHUMA ** das comparações com IN que vc faz nos CASEs….

        b) coluna com espaços em branco ou coisa assim : Evidentemente, a string ‘ 2102′ é ** totalmente ** diferente do número 2102….

        Pra vc comprovar se é isso ou não, te dou duas sugestões :

        1. Coloque um valor espúrio nos seus CASEs para os valores que não se encaixaram em nenhum dos WHEN do CASE, tipo :

        (CASE
        WHEN TOP.CODCFO_ENTRADA IN (1102,1403,1118,1113) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2102,2403,2113) THEN TO_CHAR(CAB.CODPARC,’FM9999999’)
        WHEN TOP.CODCFO_ENTRADA IN (1202,1411) THEN ‘102’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2202,2411) THEN ‘102’
        WHEN TOP.CODCFO_ENTRADA IN (1910,1911) THEN ‘386’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2910,2911) THEN ‘386’
        WHEN TOP.CODCFO_ENTRADA IN (1152,1409,1557,1209) THEN ‘128’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2152,2409,2209) THEN ‘128’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2353) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
        WHEN TOP.CODCFO_ENTRADA IN (1556) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2556) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
        WHEN TOP.CODCFO_ENTRADA IN (1917) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2917) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
        WHEN TOP.CODCFO_ENTRADA IN (1353) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
        ELSE ‘XXXXXXX’
        END)

        2. exiba os valores em colunas Separadas, pra vc poder ver se tem espaços, nulls, ou seja o que for… Tipo :

        SELECT DISTINCT

        CAB.CODEMP,
        ‘|0|’ col1,
        CAB.DTMOV,
        ‘|’ col2,
        TOP.CODCFO_ENTRADA,
        TOP.CODCFO_ENTRADA_FORA,
        (CASE
        WHEN TOP.CODCFO_ENTRADA IN (1102,1403,1118,1113) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2102,2403,2113) THEN TO_CHAR(CAB.CODPARC,’FM9999999′)
        WHEN TOP.CODCFO_ENTRADA IN (1202,1411) THEN ‘102’
        ….
        ELSE
        ‘XXXXXXX’
        END) col3,
        ‘|’, col4,
        (CASE
        WHEN TOP.CODCFO_ENTRADA IN (1102,1403,1118,1113) THEN ‘314’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2102,2403,2113) THEN ‘314’
        WHEN TOP.CODCFO_ENTRADA IN (1202,1411) THEN ‘308’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2202,2411) THEN ‘308’
        WHEN TOP.CODCFO_ENTRADA IN (1910,1911) THEN ‘315’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2910,2911) THEN ‘315’
        WHEN TOP.CODCFO_ENTRADA IN (1152,1409,1557,1209) THEN ‘318’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2152,2409,2209) THEN ‘318’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2353) THEN ‘316’
        WHEN TOP.CODCFO_ENTRADA IN (1556) THEN ‘17383’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2556) THEN ‘17383’
        WHEN TOP.CODCFO_ENTRADA IN (1917) THEN ‘321’
        WHEN TOP.CODCFO_ENTRADA_FORA IN (2917) THEN ‘321’
        WHEN TOP.CODCFO_ENTRADA IN (1353) THEN ‘5569’
        ELSE
        ‘YYYYYYY’
        END) col5,
        …. etc ….

        Acredito que com isso vc vai conseguir descobrir QUAL/QUAIS colunas não estão sendo comparadas com sucesso com nenhum WHEN de qual CASE….

        []s

        Chiappa

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.
      plugins premium WordPress