Script de geração de relatório csv

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
thrrent
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Dom, 29 Jan 2012 5:28 pm
Localização: Rio de Janeiro

Bom dia !
Estou com dúvidas, pois já vi que há várias maneiras de se fazer isso.
Tenho uma query, mas preciso executá-la através de script..
Sendo que o resultado dessa query tem que sair em um diretório pré-definido e em csv.

Se alguém puder me ajudar.

Abraço!
thrrent
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Dom, 29 Jan 2012 5:28 pm
Localização: Rio de Janeiro

Completando:

No caso seria uma estrutura

Declare

Begin

End;

para realizar essa tarefa e gravar o resultado da query em um diretório pré-definido e no formato .csv
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Para criação de arquivos a partir de plsql existem as funções da Oracle "UTL_FILE".
Dá uma olhada lá que você consegue criar seu almejado .csv.
thrrent
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 27
Registrado em: Dom, 29 Jan 2012 5:28 pm
Localização: Rio de Janeiro

--FIZ A SEGUINTE ESTRUTURA, MAS NÃO SEI SE ESTÁ CERTO, ALGUÉM PODERIA DAR UMA OLHADA?
/*A QUERY QUE EU VOU EXECUTAR DENTRO DESSE CURSOR RETORNA + OU - 37000 LINHAS, COM ESSA ESTRUTURA SERÁ QUE ATENDE AO QUE EU QUERO*/

Selecionar tudo

DECLARE
    arquivo_saida UTL_File.File_Type;

    Cursor Cur_Linha is SELECT **************
                                  from *************
                                  where **********
				  
BEGIN
    arquivo_saida := UTL_File.Fopen('p:\diretoria','relatorio_da_base.csv', 'w');
    For Reg_Linha in Cur_linha Loop
        UTL_File.Put_Line(arquivo_saida, Reg_linha.linha);
    End Loop;
    UTL_File.Fclose(arquivo_saida);
    Dbms_Output.Put_Line('Arquivo gerado com sucesso.');

	
	EXCEPTION
      WHEN UTL_FILE.INVALID_OPERATION THEN
               Dbms_Output.Put_Line('Operação inválida no arquivo.');
               UTL_File.Fclose(arquivo_saida);
      WHEN UTL_FILE.WRITE_ERROR THEN
               Dbms_Output.Put_Line('Erro de gravação no arquivo.');
               UTL_File.Fclose(arquivo_saida);
      WHEN UTL_FILE.INVALID_PATH THEN
               Dbms_Output.Put_Line('Diretório inválido.');
               UTL_File.Fclose(arquivo_saida);
      WHEN UTL_FILE.INVALID_MODE THEN
               Dbms_Output.Put_Line('Modo de acesso inválido.');
               UTL_File.Fclose(arquivo_saida);
      WHEN Others THEN
               Dbms_Output.Put_Line('Problemas na geração do arquivo.');
               UTL_File.Fclose(arquivo_saida);
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

Só uma dica brother,

Não esquece de, no teu processo, apesar do arquivo ser denominado .csv, de colocar o delimitador dentro dele, no caso, uma vírgula entre os campos.
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

No caso eu coloco ';' entre os campos.
exemplo

Selecionar tudo

v_Registro := cursor1.campo1||';'||cursor1.campo2;					  
TEXT_IO.PUT_LINE(V_ARQ, V_REGISTRO);
Responder
  • Informação
  • Quem está online

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