Gerar string de tamanho fixo para campo VARCHAR2
18/02/2008
0
Um sistema que uso (delphi/oracle) permite gerar arquivos para integrações diversas.
Tenho uma situação de geração de pedido de compra para integração com o sistema do fornecedor.
A rotina que gera arquivos permite a busca de informações via SQL e gera saida em diversos formatos, entre eles TXT de tamanho fixo, que é justamente a situação de um de nossos fornecedores.
Pois bem, tenho no sistema alguns campos de observação que são VARCHAR2 porém o resultado precisa ser de tamanho fixo. Tentei usar o comand RPAD para definir o tamanho que quero, porém quando campos do tipo varchar2 estão vazios o rpad também retorna conteudo vazio.
Alguem teria alguma solução para este caso?
Segue abaixo o SQL que estou usando para essa busca:
SELECT ´C´ as TIPO, ´000000´ as PEDIDO, ´000004´ as CLIENTE, ´1111´ as SETOR, ´0040´ as ROTA, ´00´ as VAGO1, ´0000´ as DESCONTO, TO_CHAR(PCPEDIDO.DTEMISSAO, ´DD/MM/YYYY´) as DATA, RPAD(PCPEDIDO.OBS,40) || RPAD(PCPEDIDO.OBS2,40) || substr(PCPEDIDO.OBS3,1,16) as OBS, -- RPAD(´ ´,96) as OBS, ´TP´ as CODTP, ´CO´ as CORTESIA, TO_CHAR(PCPEDIDO.DTPREVENT, ´DD/MM/YYYY´) as ENTREGA, substr(PCPEDIDO.OBS4,1,20) as OBSPED, -- RPAD(´ ´,20) as OBSPED, ´0000´ as PAGTO, TO_CHAR(PCPEDIDO.NUMPED,´9999999999999999999´) as NUMPED, ´C´ as FRETE, PCPEDIDO.OBS5 || substr(PCPEDIDO.OBS6,1,70) as OBSNEW, -- RPAD(´ ´,150) as OBSNEW, ´J´ as TIPOCLI, substr(PCFILIAL.CGC,1,2) || ´.´ || substr(PCFILIAL.CGC,3,3) || ´.´ || substr(PCFILIAL.CGC,6,3) || ´/´ || substr(PCFILIAL.CGC,9,4) || ´-´ || substr(PCFILIAL.CGC,13,2) as CNPJ FROM PCPEDIDO, PCFILIAL WHERE PCPEDIDO.CODFILIAL = :CODFILIAL AND PCFILIAL.CODIGO = :CODFILIAL AND PCPEDIDO.NUMPED = :PEDIDO
Reparem as linhas comentadas que foram paleativos que funcionaram na geração do arquivo de tamanho fixo, porém não estão trazendo o conteudo dos campos, apenas espaços.
Aerreira
Posts
19/02/2008
Flyskin
Ex.
SELECT
A.CODIGO,
FN_PREENCHE_STRING(A.NOME, 50) AS NOME
FROM
CLIENTE A
É por aí...
19/02/2008
Aerreira
Hum... O pior é que não saco muito de Oracle para poder criar essa função.. Uso mais o Firebird, porém como o sistema é de outra empresa, estou lá como usuário somente, não tenho muitas opções.
Vou estudar melhor como montar essa função no banco, se tiver dúvidas à respeito faço nova interação aqui nesse tópico.
Valeu pela dica.
28/02/2008
Aerreira
RPAD(NVL(PCPEDIDO.OBS,´ ´),40) || RPAD(NVL(PCPEDIDO.OBS2,´ ´),40) || RPAD(NVL(PCPEDIDO.OBS3,´ ´),16) as OBS,
28/02/2008
Flyskin
28/02/2008
Aerreira
Sim, como pode ver acima era o que ocorria.
Clique aqui para fazer login e interagir na Comunidade :)