Translate

sexta-feira, 28 de março de 2014

LOOP

Loops são utilizados para rodar instruções mais de uma vez.

Abaixo exemplos dos 3 tipos de Loops: Simple Loops, While Loops e For Loops


SIMPLE LOOPS

declare
  v_count number:= 0;
begin
  LOOP
    v_count := v_count + 1;
    dbms_output.put_line('v_count: '||v_count);
    EXIT WHEN v_count = 5;  
  END LOOP;
end;  

Resultado esperado:
v_count: 1
v_count: 2
v_count: 3
v_count: 4
v_count: 5

declare
  v_count number:= 0;
begin
  LOOP
    v_count := v_count + 1;
    if v_count <= 5 then
      dbms_output.put_line('v_count: '||v_count);
    else
      exit;
    end if;        
  END LOOP;
end;  

Resultado esperado:
v_count: 1
v_count: 2
v_count: 3
v_count: 4
v_count: 5

Muito importante não esquecer de inicializar a variável (v_count number:= 0) pois caso a mesma não seja inicializada, irá ocorrer um Loop infinito, o contador não realiza soma de uma variável nula, ou seja, null + 1 é null e o contador nunca irá atingir o valor para terminar o loop.



WHILE LOOPS


Declare
  v_count number:= 0;
begin
  WHILE v_count < 5 LOOP
    v_count := v_count + 1;
    dbms_output.put_line('v_count: '||v_count);
  END LOOP;
end;

Resultado esperado:
v_count: 1
v_count: 2
v_count: 3
v_count: 4
v_count: 5

Observe que o operador foi trocado para < (menor), se mantivermos o mesmo operador do exemplo do Loop Simples (<= menor ou igual) , irá trazer também v_count: 6 



FOR LOOPS


declare
  v_count number:= 0;
begin   
  FOR v_count IN 1..5 LOOP
    dbms_output.put_line('v_count: '||v_count);
  END LOOP;
end;  

Resultado esperado:
v_count: 1
v_count: 2
v_count: 3
v_count: 4
v_count: 5

No exemplo abaixo usamos REVERSE, que faz com que o loop se inicie no 5 e termine no 1

declare
  v_count number:= 0;
begin   
  FOR v_count IN REVERSE 1..5 LOOP
    dbms_output.put_line('v_count: '||v_count);
  END LOOP;
end; 


Resultado esperado:  
v_count: 5
v_count: 4
v_count: 3
v_count: 2
v_count: 1

Qual a melhor opção de loop a ser usada ?
Na minha opinião a melhor maneira é aquela que você se acostumar, pois uma vez que você se acostuma com uma maneira e entende bem o seu funcionamento, dificilmente irá mudar. 
Eu particularmente costumo utilizar For Loop, acho mais simples de ser escrito, principalmente quando utilizado com Cursor.
Qualquer das três opções irá trazer o mesmo resultado caso escrito corretamente.

Nenhum comentário:

Postar um comentário