Nesse artigo vamos aprender os loops simples em Oracle PL/SQL. Prepare-se para uma jornada de aprendizado que vai transformar a maneira como você escreve código!
Objetivos do Artigo
Ao final desta aula, você será capaz de:
- Utilizar Loops Simples com Condições EXIT
- Utilizar Loops Simples com Condições EXIT WHEN
Vamos começar destrinchando cada conceito, passo a passo.
O que é um Loop Simples?
Imagine que você está contando grãos de arroz. Em vez de contar um por um manualmente, você poderia usar uma máquina que conta automaticamente até você dizer “pare”. Esse é o princípio básico de um loop simples em programação.
Um loop simples é a estrutura de repetição mais básica em PL/SQL. Veja como ele se parece:
1 2 3 4 5 6 |
LOOP INSTRUÇÃO 1; INSTRUÇÃO 2; ... INSTRUÇÃO N; END LOOP; |
A palavra reservada LOOP
marca o início do nosso loop simples. As instruções de 1 a N são executadas repetidamente. O END LOOP
indica o fim da nossa estrutura de loop.
O Perigo do Loop Infinito
Aqui está um detalhe importante: se você usar apenas essa estrutura básica, seu loop vai rodar para sempre! É como se você dissesse à máquina de contar arroz “conte até eu mandar parar”, mas nunca desse o comando de parada. Por isso, chamamos isso de loop infinito.
Para evitar esse problema, precisamos de uma condição de saída. Existem duas formas principais de fazer isso: usando EXIT
ou EXIT WHEN
.
Usando a Instrução EXIT
A instrução EXIT
é como um botão de emergência para o seu loop. Quando acionada, ela faz o loop parar imediatamente. Geralmente, usamos EXIT
junto com uma condição IF
. Veja a estrutura:
1 2 3 4 5 6 7 8 |
LOOP INSTRUÇÃO 1; INSTRUÇÃO 2; IF CONDIÇÃO_DE_SAÍDA THEN EXIT; END IF; END LOOP; INSTRUÇÃO 3; |
Quando a CONDIÇÃO_DE_SAÍDA
é verdadeira, o loop para e o programa segue para a INSTRUÇÃO 3
.
Vamos ver um exemplo prático:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
DECLARE v_contador BINARY_INTEGER := 0; BEGIN LOOP -- incrementa o contador do loop em um v_contador := v_contador + 1; DBMS_OUTPUT.PUT_LINE('v_contador = ' || v_contador); -- se a condição de saída for verdadeira, sai do loop IF v_contador = 5 THEN EXIT; END IF; END LOOP; -- o controle continua aqui DBMS_OUTPUT.PUT_LINE('Pronto...'); END; |
Este código vai contar de 1 a 5 e depois imprimir “Pronto…”. A variável v_contador
é o que chamamos de contador de loop.
A Importância da Inicialização
Atenção! É crucial inicializar a variável v_contador
. Se você não fizer isso, o valor dela será NULL, e a expressão NULL + 1
resulta em NULL. Isso criaria um loop infinito, pois a condição de saída nunca seria verdadeira.
Posicionamento da Condição de Saída
O lugar onde você coloca a condição de saída é muito importante. Ele determina se todas as instruções dentro do loop serão executadas na última iteração. Veja este exemplo modificado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
DECLARE v_contador BINARY_INTEGER := 0; BEGIN LOOP v_contador := v_contador + 1; IF v_contador = 5 THEN EXIT; END IF; DBMS_OUTPUT.PUT_LINE('v_contador = ' || v_contador); END LOOP; DBMS_OUTPUT.PUT_LINE('Pronto...'); END; |
Neste caso, o programa só imprimirá até 4, porque a condição de saída é verificada antes do DBMS_OUTPUT.PUT_LINE
.
Usando a Instrução EXIT WHEN
A instrução EXIT WHEN
é como um porteiro inteligente para o seu loop. Ela combina a condição e a saída em uma única linha. Veja a estrutura:
1 2 3 4 5 6 |
LOOP INSTRUÇÃO 1; INSTRUÇÃO 2; EXIT WHEN CONDIÇÃO_DE_SAÍDA; END LOOP; INSTRUÇÃO 3; |
Vamos reescrever nosso exemplo anterior usando EXIT WHEN
:
1 2 3 4 5 6 7 8 9 10 11 12 |
DECLARE v_contador BINARY_INTEGER := 0; BEGIN LOOP v_contador := v_contador + 1; DBMS_OUTPUT.PUT_LINE('v_contador = ' || v_contador); EXIT WHEN v_contador = 5; END LOOP; DBMS_OUTPUT.PUT_LINE('Pronto...'); END; |
Este código produz exatamente o mesmo resultado que o exemplo com IF
e EXIT
, mas de uma forma mais concisa.
EXIT Fora de Loops
Cuidado! A instrução EXIT
só é válida dentro de loops. Se você tentar usá-la fora de um loop, receberá um erro de sintaxe. Para sair de um bloco PL/SQL antes do fim normal, use a instrução RETURN
:
1 2 3 4 5 |
BEGIN DBMS_OUTPUT.PUT_LINE('Linha 1'); RETURN; DBMS_OUTPUT.PUT_LINE('Linha 2'); END; |
Este código só imprimirá “Linha 1”, pois o RETURN
encerra o bloco antes de chegar à segunda linha.
Loop de Uma Iteração
Se você usar EXIT
sem uma condição logo no início do loop, ele só executará uma vez:
1 2 3 4 5 6 7 8 |
DECLARE v_contador NUMBER := 0; BEGIN LOOP DBMS_OUTPUT.PUT_LINE('v_contador = ' || v_contador); EXIT; END LOOP; END; |
Este código só imprimirá “v_contador = 0” uma vez.
Exemplo Prático: Números Pares
Vamos criar um exemplo mais prático. Digamos que queremos imprimir os números pares de 2 a 10:
1 2 3 4 5 6 7 8 9 10 11 12 |
DECLARE v_numero NUMBER := 0; BEGIN LOOP v_numero := v_numero + 2; DBMS_OUTPUT.PUT_LINE('Número par: ' || v_numero); EXIT WHEN v_numero = 10; END LOOP; DBMS_OUTPUT.PUT_LINE('Esses são os números pares de 2 a 10!'); END; |
Este código imprimirá os números pares de 2 a 10 e depois uma mensagem final.
Conclusão
Loops simples são ferramentas poderosas em PL/SQL. Eles permitem que você repita ações de forma eficiente, economizando tempo e tornando seu código mais limpo e organizado. Lembre-se sempre de incluir uma condição de saída para evitar loops infinitos, e escolha entre EXIT
e EXIT WHEN
dependendo do que torna seu código mais legível e eficiente.
A prática é essencial para dominar loops. Experimente criar seus próprios exemplos, teste diferentes condições de saída e observe como o comportamento do loop muda. Com o tempo e prática, você se tornará um mestre em loops PL/SQL!