Provavel problema com o tamanho da linha no UTL_FILE

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
daniel.mendonça
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qui, 06 Mar 2008 2:39 pm
Localização: Mococa-SP
Contato:
Daniel Mendonça

Ola,

Estou tendo um problema que aparentemente é com o tamanho da linha no UTL_FILE. Eu cheguei a essa conclusão por que linhas pequenas são inseridas normalmente.
Infelizmente eu não pude ter certeza pois, eu estive procurando sobre propriedades do UTL_FILE e não encontrei nada relacionado a limites de caracteres na linha... Alguém tem alguma informação que possa me ser util?
Segue o código:

Selecionar tudo

PROCEDURE CRI_ARQ_SAIDA(LINE IN VARCHAR2, NOME_FILE IN VARCHAR2) IS
  
    
     ARQUIVO_SAIDA UTL_FILE.FILE_TYPE;

     --VARIAVEIS DE CONFIGURAÇÃO
     FOLDER                  VARCHAR2(30)   := '/tmp';
     FILE_NAME               VARCHAR2(30)   := NOME_FILE ||'.txt';
     
  BEGIN

     --GRAVA ARQUIVO DE SAIDA  
     ARQUIVO_SAIDA := UTL_FILE.Fopen(FOLDER , FILE_NAME , 'A');
     UTL_FILE.PUT_LINE(ARQUIVO_SAIDA , LINE);
     UTL_FILE.Fclose(ARQUIVO_SAIDA); 

  EXCEPTION
     WHEN Others THEN
          DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'dd/mm/yyy - hh:mm:ss') ||'### ERRO DURANTE A GRAVAÇÃO DO ARQUIVO. ###');

  END CRI_ARQ_SAIDA;
e aqui como estou criando a linha e enviando para a procedure acima:

Selecionar tudo

DECLARE
    VAR_HEADER     VARCHAR2(4455);
        
BEGIN
     
     /* Formatar o registro de HEADER do arquivo de saída 2: */
     VAR_HEADER := LPAD('0',2,' ')|| /*RHCT_TP_REG*/
                  TO_CHAR(SYSDATE,'DDMMYYYY')||/*RHCT_DT_ARQ*/
                  '01'||/*RHCT_NO_VERSAO*/
                  '1'||/*RHCT_CD_REMESSA*/
                  RPAD('TESTE',8,' ')||/*RHCT_NM_APLIC*/
                  LPAD('4455',4,' ')||/*RHCT_NO_TAM_REG*/
                  LPAD(' ',4424,' ')||/*RHCT_FILLER*/
                  LPAD('1',6,' ');/*RHCT_SEQUENCIA*/


     CRI_ARQ_SAIDA(VAR_HEADER, 'CARGA_TESTE_ARQ1');
     
END;
A variavel VAR_HEADER desse código, não pode ser alterada pois, gera um layout padão de cabeçalho de uma tabela txt

Obrigado a Todos...
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

O limite para o utl_file.put_line e utl_file.get_line é de 32767 bytes.

Você não especificou a sua versão do banco, mas sei que na versão 10g o valor padrão é de 1024 bytes por linha.
Para especificar um tamanho de linha maior, informe o número para o parâmetro max_linesize da função utl_file.fopen.

Selecionar tudo

UTL_FILE.FOPEN 
( location     in varchar2
, filename     in varchar2
, open_mode    in varchar2
, max_linesize in binary_integer
) 
  RETURN file_type;
daniel.mendonça
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Qui, 06 Mar 2008 2:39 pm
Localização: Mococa-SP
Contato:
Daniel Mendonça

Obrigado rogenaro, focou tudo certo agora...

Essa é a linha alterada no meu código caso alguém tenha a mesma duvida...

Selecionar tudo

ARQUIVO_SAIDA := UTL_FILE.Fopen(FOLDER , FILE_NAME , 'A', 5000);
Obrigado...
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 19 visitantes