- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 7 anos, 10 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
26 de janeiro de 2017 às 3:28 pm #108598Oswaldo JúniorParticipante
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||3225Quando deveria sair
1|0|06/05/16|1399|317|1444.26|90.07|270Ou seja onde tem case falta retornar:
1|0|01/11/16|falta_case|falta_case|84.87|falta_case|322526 de janeiro de 2017 às 11:42 pm #108605José Laurindo ChiappaModeradorOpa, 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
-
AutorPosts
- Você deve fazer login para responder a este tópico.