Algumas vezes temos que executar consultas que retornam mais de um registro, precisamos inserir isso numa tabela, gravar em um log, gerar um arquivo, e outra série de possibilidades.

Desta vez, vamos aprimorar o post anterios, fazendo um select um pouco mais interessante e gerando um arquivo txt com a saída deste select.

Vamos ao nosso exemplo.


declare
type tpNome is REF CURSOR;
cNome tpNome;

–Variáveis para armazenar query e retorno.
v_sql varchar2(1000);
v_nome varchar2(100);

–Variáveis para geração do arquivo
v_arq utl_file.file_type;
begin
–Define a query
v_sql := ‘Select nome from pessoas where rownum < 50′;

–Abre o arquivo
v_arq := utl_file.fopen(’DIRECTORY’, ‘FILE_NAME’, ‘W’);

open cNome for v_sql;
loop
fetch cNome into v_nome;
exit when cNome%notfound;

utl_file.put_line(v_arq, v_nome);
end loop;

–Fecha o arquivo
utl_file.fclose;
end;

No exemplo acima, estamos lendo os 50 primeiros registros de uma tabela chamada pessoas e gerando um arquivo com o nome destas pessoas. Bastante simples.