Estou criando um arquivo de importação de edi, através de uns dados do oracle, porém estou com a seguinte dificuldade, tentarei explicar da forma mais clara possível:
Imaginem que eu tenha que gerar um arquivo TXT com 400 posições, porém eu só tenho 300 posições de dados, o resto deve ser completado com espaços.
No comando SELECT rpad(' ', 50, chr(32)) , o oracle acaba por não gerar todo o arquivo, ele simplismente ignora o retorno pois os dados são todos espaços.
Segue o comando inteiro que estou utilizando:
set linesize 100000000000
set verify off
set head off
set feed off
set wrap on
col arquivo new_value arquivo
SELECT 'C:\PRE05' || TO_CHAR(SYSDATE, 'yyyymmddhhmmss') || '.txt' as arquivo
FROM DUAL;
set termout on
spool "&arquivo"
select 'A' || -- OPERAÇÃO (01) ( VARCHAR ) -- OBRIGATÓRIO
rpad(a.numpedido, 30, ' ')|| -- REC_ORDER_CODE (30) ( VARCHAR ) -- OBRIGATÓRIO
rpad(a.clmcl, 10, ' ')|| -- WAREHOUSE_CODE (10) ( VARCHAR ) -- OBRIGATÓRIO
rpad(' ', 20, ' ')|| -- SUPPLIER_CODE (20) ( VARCHAR )
rpad(' ', 20, ' ')|| -- CARRIER_CODE (20) ( VARCHAR )
rpad(a.numnf, 50, ' ')|| -- DOCUMENT (50) ( VARCHAR )
rpad(' ', 50, ' ')|| -- TRANSPORT_TYPE (50) ( VARCHAR )
rpad(' ', 50, ' ')|| -- MAIN_TRANSPORT (50) ( VARCHAR )
rpad(' ', 50, ' ')|| -- AUX_TRANSPORT (50) ( VARCHAR )
rpad(' ', 50, ' ')|| -- SOURCE (50) ( VARCHAR )
rpad(a.tiporecebimento, 100, ' ')|| -- DESCRIPTION (100) ( VARCHAR )
rpad(' ', 14, ' ')|| --EXPECTED_DATE (14) ( DATE )
rpad(' ', 17, ' ')|| --CONTAINERS (12,5) (NUMBER)
rpad(' ', 30, ' ')|| --ORDER_TYPE (30) ( VARCHAR )
rpad(' ', 12, ' ')|| --ACCOUNT_CODE (12) ( VARCHAR )
rpad(' ', 50, ' ')|| --COMPANY (50) ( VARCHAR )
lpad(' ', 17, ' ')|| --DAYS_FROM_REC (12,5) ( NUMBER )
rpad(' ', 12, ' ')|| --DOOR_CODE (12) ( VARCHAR )
lpad(a.numlinha, 10, 0)|| -- num_linha (10) (NUMBER)
chr(13)||--QUEBRA DE LINHA
'/'|| --DETAIL_LINE_START (1) ( VARCHAR ) -- OBRIGATÓRIO
rpad(a.sku, 50, ' ')|| --PRODUCT_CODE (50) ( VARCHAR ) -- OBRIGATÓRIO
lpad(a.quantidade, 17, 0)|| -- QUANTITY (12,5) (NUMBER) -- OBRIGATÓRIO
rpad(' ', 100, ' ')
from custom_pre a;
SPOOL OFF;
Consegui ser claro?
Desde já, obrigado!!