Abaixo exemplos dos 3 tipos de Loops: Simple Loops, While Loops e For Loops
SIMPLE LOOPS
declarev_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