Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JhonyMega

LOOP de SELECT na procedure

Recommended Posts

:( :(

Bom to fazendo uma SELECT com vários JOIN e preciso fazer um loop do resultado dessa seleção. Preciso poder usar os valores dos campos para comparações. Sendo os resultados satisfatórios quero inserir em uma tabela TEMPORÁRIA, que será o retorno da PROCEDURE.

 

COMO FAZER: http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

1 - Como faso para fazer um loop do resultado de um SELECT passando linha por linha.

2 - Como usar esses valores da linha EX. (int i=0; (i++) linhaCampo)

3 - Como criar uma tabela temporária nomeio da aplicação de uma PROCEDURE e inserir valores e depois retorna la como SELECT original.

 

Bom pessoal essas são as minhas duvidas ... Pois tentei fazer aqui em casa mas não consegui. Se puderem ajudar ficaria ficaria muito agradecido.

:o :o

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exeemplo usando GLOBAL TEMPORARY TABLE

 

CREATE GLOBAL TEMPORARY TABLE gtt_exemplo (
  mes_ano_ref      DATE         NOT NULL,
  valor_           NUMBER(14,2) NULL
)
  ON COMMIT PRESERVE ROWS
/

na sp

 

BEGIN

  DELETE FROM GTT_TOTAIS_EVENTO_N_AAG;

  loop

	INSERT INTO gtt_exemplo

  end loop

  --trata a tmp


  DELETE FROM GTT_TOTAIS_EVENTO_N_AAG;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exeemplo usando GLOBAL TEMPORARY TABLE

 

CREATE GLOBAL TEMPORARY TABLE gtt_exemplo (
  mes_ano_ref      DATE         NOT NULL,
  valor_           NUMBER(14,2) NULL
)
  ON COMMIT PRESERVE ROWS
/

na sp

 

BEGIN

  DELETE FROM GTT_TOTAIS_EVENTO_N_AAG;

  loop

	INSERT INTO gtt_exemplo

  end loop

  --trata a tmp


  DELETE FROM GTT_TOTAIS_EVENTO_N_AAG;

Pode coloar um exemplo, pois eu não sei a sintax.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua dúvida parece mais de síntaxe plsql, seria bom baixar o manual da Oracle e dar uma lida, mas creio que este exemplo te ajude.

 

create global temporary table gtt ( id int ) on commit delete rows;
                                                                                                    
        
create or replace procedure foo( p_rand in number default dbms_random.value( 0, 5000 ))
as
    l_cnt  number := 0;
begin
                                                                                                    
        
    insert into gtt
    select rownum
      from big_table
     where rownum <= p_rand;
                                                                                                    
        
    dbms_output.put_line( sql%rowcount || ' rows in gtt' );
                                                                                                    
        
    for x in ( select /*+ dynamic_sampling(gtt 10) dynamic_sampling_est_cdn(gtt) */ big_table.*
                 from big_table, gtt
                where big_table.id = gtt.id )
    loop
        l_cnt := l_cnt+1;
    end loop;
    dbms_output.put_line( l_cnt || ' rows fetched' );
    commit;
end;
/

Fonte

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.