Como gerar um arquivo txt utilizando o agendador de tarefas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
luizeduardo
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 19 Abr 2012 9:29 am

Bom dia a todos,
gostaria de uma ajuda, stou construindo uma query para a geração de um arquivo em txt de uma tabela de produtos em nosso banco de dados. Assim gostaria de uma ajuda na geração deste arquivo altomático via SqlPlus ou pelo Navigator, salvando em arquivo txt, sem o cabeçalho.
já tentei utilizar o spool c:\produtos.txt, só que o arquivo pe gerado com o cabeçalho;
o arquivo está vindo cortando, utilizei o set linesize = 3000 e mesmo assim corta;

em um exemplo básico pelo sqlplus estou fazendo assim:

set echo off
set verify off
set feedback off
ttitle off
set heading on
set linesize 3000
spool c:\produtos.txt

select codprod||';'||descricao from pcprodut;

spool off;

Desde já, agradeço e aguardo.
schnu
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 110
Registrado em: Ter, 24 Mai 2005 9:16 pm
Localização: Dongguan - Guangdong - China
Deus criou os loucos para confundir os sábios

Eu utilizaria o comando UTL_FILE.

Segue uma procedure que irá gerar um arquivo TXT a partir de um cursor. Mas você deve criar um diretorio antes

Para criar o diretorio:

Selecionar tudo

create or replace directory GERA_ARQUIVO
  as 'C:\TESTE';
Grants necessarios para o diretório: O método que estou passando irá dar grant pra todos os usuário, você pode passar somente para o usuario que irá gerar o arquivo

Selecionar tudo

grant read, write on directory GERA_ARQUIVO to PUBLIC  

Package que gera arquivo TXT

Selecionar tudo

CREATE OR REPLACE Package PKG_TXT AS
---------------
-- Gera Txts --
---------------
Procedure PRC_GERA_TXT
    ( P_Nome_Local       In  Varchar2
    , P_Nome_Arq         In  Varchar2
    );
End PKG_TXT ;
CREATE OR REPLACE Package Body PKG_TXT AS
Procedure PRC_GERA_TXT
    ( P_Nome_Local       In  Varchar2
    , P_Nome_Arq         In  Varchar2
    )
Is
  ------------
  -- Cursor --
  ------------
  Cursor cCursor is
  Select cod_fornecedor Coluna01
       , nome_fornecedor Coluna02
    From fornecedor;
  ---------------
  -- Variaveis --
  ---------------
  vLinha    Varchar2(2000);
  uArquivo  Utl_File.File_Type;
  nCommit   Number := 0;
Begin
  --------------------------
  -- Define no do Arquivo --
  --------------------------
  Begin
    -----------------------
    --- Abre arquivo txt --
    -----------------------
    uArquivo := Utl_File.FOpen(P_Nome_Local , P_Nome_Arq  , 'w');
    --uArquivo := Utl_File.FOpen('D:\' , P_Nome_Arq  , 'w');
    --------------------------------------
    -- Abre Cursor de Uma Tabela Oracle --
    --------------------------------------
    For rCursor In cCursor Loop
      Begin
        vLinha := rCursor.Coluna01
               || To_Char(rCursor.Coluna02);
        ----------------------------
        -- Grava linha no Arquivo --
        ----------------------------
        Utl_File.Put_Line(uArquivo , vLinha);
        Utl_File.FfLush(uArquivo);
      Exception
        -- OS error occured during write operation
        When Utl_File.Write_Error        Then
          Raise_Application_Error(-20204, 'PROBLEMA NA GRAVACAO DO '||
                                          'ARQUIVO');
        -- file handle is invalid
        When Utl_File.Invalid_FileHandle Then
          Raise_Application_Error(-20205, 'Invalid_FileHandle'
                                          || SqlErrm);
      End;
      nCommit := nCommit + 1;
      If nCommit > 1000 Then
        Commit;
        nCommit := 0;
      End If;
    End Loop;
  Exception
    -- file location or name was invalid
    When Utl_File.Invalid_Path      Then
      Raise_Application_Error(-20210, 'PROBLEMA NA ABERTURA ARQUIVO, '||
                                      'INVALID PATH');
    -- the open_mode string was invalid
    When Utl_File.Invalid_Mode      Then
      Raise_Application_Error(-20211, 'PROBLEMA NA ABERTURA ARQUIVO, '||
                                      'INVALID MODE');
    -- file could not be opened as requested
    When Utl_File.Invalid_Operation Then
      Raise_Application_Error(-20212, 'Invalid_Operation '|| SqlErrm);
    -- specified max_linesize is too large or too small
    When Utl_File.Invalid_Maxlinesize Then
      Raise_Application_Error(-20213, 'Invalid_Maxlinesize '
                                      || SqlErrm);
  End;
  -------------------
  -- Fecha Arquivo --
  -------------------
  Utl_File.FClose(uArquivo);
  Commit;
End PRC_GERA_TXT;
End PKG_TXT;



Chamando a procedure

Selecionar tudo

begin
  PKG_TXT.PRC_GERA_TXT ( 'GERA_ARQUIVO', 'teste.txt');
end;
         
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Fiz dessa forma abaixo aqui, utilizando o SQL*Plus:

Selecionar tudo

set verify off;
set feedback off;
set echo off;
set heading off;
set linesize 20000;
spool c:\teste.txt;

select * from <sua_tabela>;

spool off;
E acabou funcionando legal.
Veja se consegue ai e, qualquer coisa, conte com a gente.
Responder
  • Informação
  • Quem está online

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