Aprenda PL/SQL

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
  

Mensagemem Qui, 06 Mar 2008 3:01 pm

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:

Código: Selecionar todos
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:

Código: Selecionar todos
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...
daniel.mendonça
Localização: Mococa-SP

Daniel Mendonça

Mensagemem Qui, 06 Mar 2008 6:31 pm

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.

Código: Selecionar todos
UTL_FILE.FOPEN
( location     in varchar2
, filename     in varchar2
, open_mode    in varchar2
, max_linesize in binary_integer
)
  RETURN file_type;
rogenaro
Localização: Londrina - PR

Rafael O. Genaro

Mensagemem Sex, 14 Mar 2008 10:23 am

Obrigado rogenaro, focou tudo certo agora...

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

Código: Selecionar todos
ARQUIVO_SAIDA := UTL_FILE.Fopen(FOLDER , FILE_NAME , 'A', 5000);


Obrigado...
daniel.mendonça
Localização: Mococa-SP

Daniel Mendonça


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


Voltar para PL/SQL

Quem está online

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