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.

Se vocês observarem os comentários do tópico anterior, vão ver que tem um comentário de um Anônino perguntando se não tenho um exemplo de SQL Dinâmico e que gere um arquivo. Resposta: Não tenho. Mas isso não quer dizer que não podemos fazer um.

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.

Querido amigo Anônimo, espero que isso te ajude, na próxima vez deixa teu email que fica mais fácil de responder pra você.

Grande abraço a todos.

Atc.
Gerson Júnior
(gerson.vasconcelos@gmail.com)

8 ideias sobre “SQL Dinâmico gerando arquivo

  1. Ana Consuelo Gameiro

    Eu nao consegui executar desta forma, somente alterando a linha que abre o cursor.
    Assim:
    Open cNome For Select nome From Pessoas;

    Responder
  2. Gerson Júnior

    Qual a versão do Oracle que você usa?
    Creio que testei isso antes de publicar, funcionou sem maiores problemas. O Oracle era um 10g.

    Obrigado pelo comentário, e volte sempre!

    Atc.
    Gerson Júnior

    Responder
  3. Zefanias Mobiua

    Esta ler os seus conteudos e sao muito bons, neste momento estou com uma dificuldade, pretendo fazer uma consulta para ler dados de documento .xml guardado num campo de uma tabela. Se puderes podias me passar um exemplo que faz algo do genero. Fui lendo pela internet e tudo que fui encontrando, nao me era claro na parte didatica,

    valeu

    Responder
  4. Alexssandro Gauto

    Olá boa tarde!
    Estou iniciando um curso com enfase do Oracle,
    minha dúvida de como fazer uma script cujo tenho extrair a diferença entre a coluna 3 e a coluna 4 e que seja mostradas na coluna 5.
    ex:
    SELECT A.COLUNA1, A.COLUNA2, SUBQUERY1 AS COLUNA3,SUBQUERY2 AS COLUNA4,

    FROM TABELA A
    WHERE A.COLUNAXX = XXX

    AGuardo comentário
    Obrigado

    Responder
    1. oracle Autor do post

      Boa tarde Alexssandro, tudo bem?
      Primeiro, obrigado pela visita.

      Para essa questão, se é entre colunas da mesma tabela, pode ser sem sub-query, assim:

      select coluna1, coluna2, coluna3, coluna4, coluna4-coluna3 diferenca from tabela where colunaxx = XXX;

      Espero que seja isso… se entendi corretamente.
      Se não, podemos ver melhor e tentar ajudar.

      Abraços.

      Gerson Júnior
      gerson.vasconcelos@gmail.com

      Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *