SQL Dinâmico Gerando arquivo
Fala PessoAll,
Bom, no último tópico postado Oracle Execute Immediate SQL Dinâmico eu falei um pouco sobre como montar e executar query’s dinâmicamente. Ficou bem interessante, mas… o exemplo que postei era para um único registro, e não é sempre que temos este tipo de caso. 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.
O exemplo acima abre uma série de portas, este é o famoso “fio da meada” e a partir deste exemplo uma série de coisas podem ser feitas.
Grande abraço a todos.
Atc