quarta-feira, 13 de janeiro de 2010

Gravando arquivo com dados de uma tabela

-- Gravando arquivo com dados de uma tabela
serveroutput on
BEGIN 
    DECLARE 
                  arquivo_saida UTL_FILE.FILE_TYPE;
                  vsqlerrm      Varchar2(
1024):=null ;
    BEGIN
    
           
-- abre arquivo  
            arquivo_saida := Utl_File.FOpen(
'/utl_file/log''arquivox.txt','W',9192); -- 'W'); --   
          
           
-- abre um cursor com os dados a serem gravados
            for c in (select substr(a.coluna,
1,37)||' '||substr(a.coluna,39) coluna FROM LITXLS a )
            loop
                
-- escreve no arquivo                       
                 Utl_File.put_line(arquivo_saida, c.coluna  );                       
            end loop;
            
           
-- fecha arquivo  
            Utl_File.FClose(arquivo_saida);
    
            EXCEPTION
-- tratamento de alguma EXCEPTION
                  WHEN UTL_FILE.INVALID_OPERATION THEN
                           Dbms_Output.Put_Line(
'Operação inválida no arquivo.'||Sqlerrm);
                           UTL_File.Fclose(arquivo_saida);
                  WHEN UTL_FILE.WRITE_ERROR THEN
                           Dbms_Output.Put_Line(
'Erro de gravação no arquivo.'||Sqlerrm);
                           UTL_File.Fclose(arquivo_saida);
                  WHEN UTL_FILE.INVALID_PATH THEN
                           Dbms_Output.Put_Line(
'Diretório inválido.'||Sqlerrm);
                           UTL_File.Fclose(arquivo_saida);
                  WHEN UTL_FILE.INVALID_MODE THEN
                           Dbms_Output.Put_Line(
'Modo de acesso inválido.'||Sqlerrm);
                           UTL_File.Fclose(arquivo_saida);
                  WHEN Others THEN
                           Dbms_Output.Put_Line(
'Problemas na geração do arquivo.'||Sqlerrm);
                           UTL_File.Fclose(arquivo_saida);
    END;
END;
/