Oracle PL/SQL FOR LOOP com exemplo

⚡ Resumo Inteligente

Oracle O laço FOR em PL/SQL executa um bloco de código um número conhecido de vezes, entre um limite inferior e um superior. A variável do laço é declarada implicitamente e se autoincrementa, portanto, nenhum contador manual é necessário, e a palavra-chave REVERSE permite que o laço conte de forma regressiva.

  • 🔢 Melhor para: Um laço FOR é mais adequado para uma contagem de iterações conhecida do que para uma condição indefinida.
  • 📏 Faixa de Medição: Um limite inferior e um limite superior definem quantas vezes o loop é executado.
  • ⚙️ Contador implícito: A variável de loop é declarada automaticamente e incrementa por conta própria.
  • 🎯 Escopo: A variável de loop existe apenas dentro do loop.
  • 🔄 REVERTER: Adicionar REVERSE antes do limite inferior faz com que o loop conte regressivamente.
  • 🪜 Aninhado: Os loops podem ser aninhados, e o loop interno é executado completamente para cada iteração externa.
  • 🚪 Saída automática: O loop termina automaticamente quando a variável sai do intervalo.

Oracle Loop For em PL/SQL

O que é um laço FOR?

A instrução “FOR LOOP” é mais adequada quando você deseja executar um código um número conhecido de vezes, em vez de com base em alguma outra condição.

Nesse laço, são especificados um limite inferior e um limite superior, e enquanto a variável do laço estiver dentro desse intervalo, o laço é executado.

A variável de loop é auto-incrementável, portanto, nenhuma operação de incremento explícita é necessária. A variável de loop não precisa ser declarada, pois é declarada implicitamente.

FOR <loop_variable> in <lower_limit> .. <higher_limit>
LOOP
<execution block starts>
.
.
.
<execution_block_ends>
END LOOP;

Explicação da sintaxe:

  • A palavra-chave 'FOR' marca o início do loop e 'END LOOP' marca o fim.
  • A variável de loop é avaliada a cada iteração, antes da execução da parte do loop.
  • O bloco de execução contém todo o código que precisa ser executado e pode conter qualquer instrução executável.
  • A variável `loop_variable` é declarada implicitamente durante a execução do loop, e seu escopo se restringe ao interior do loop.
  • Quando a variável do loop sai do intervalo estabelecido, o controle é encerrado no loop.
  • O loop pode ser configurado para funcionar em ordem inversa adicionando a palavra-chave 'REVERSE' antes de lower_limit.

1 exemplo: Neste exemplo, imprimimos os números de 1 a 5 usando uma instrução de repetição FOR.

Loop FOR imprimindo os números de 1 a 5

BEGIN
dbms_output.put_line('Program started.');
FOR a IN 1 .. 5
LOOP
dbms_output.put_line(a);
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Code Explicação:

  • Code linha 2: Exibição da mensagem "Programa iniciado".
  • Code linha 3: A palavra-chave 'FOR' marca o início do laço e a variável de laço 'a' é declarada. Ela agora assume valores de 1 a 5.
  • Code linha 5: Imprime o valor de 'a'.
  • Code linha 6: A palavra-chave 'END LOOP' marca o fim do bloco de execução.
  • A linha 5 continua a ser executada até que 'a' atinja o valor 6, momento em que a condição falha e o controle sai do loop.
  • Code linha 7: Imprimir a mensagem "Programa concluído".

Loops aninhados

Instruções de laço também podem ser aninhadas. Os laços externo e interno podem ser de tipos diferentes. Em um laço aninhado, a cada iteração do laço externo, o laço interno é executado completamente.

Estrutura de loop aninhado

LOOP --outer
<execution block starts>
LOOP --inner
<execution_part>
END LOOP;
<execution_block_ends>
END LOOP;

Explicação da sintaxe:

  • O laço externo possui mais um laço dentro dele.
  • Os loops podem ser de qualquer tipo, e a funcionalidade de execução é a mesma.

1 exemplo: Neste exemplo, imprimimos os números de 1 a 3 usando um laço FOR. Cada número é impresso tantas vezes quantas forem suas quantidades.

Exemplo de laço FOR aninhado - Parte 1

Exemplo de laço FOR aninhado - Parte 2

DECLARE
b NUMBER;
BEGIN
dbms_output.put_line('Program started');
FOR a IN 1..3
LOOP
b:= 1;
WHILE (a>=b)
LOOP
dbms_output.put_line(a);
b:= b+1;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed');
END;
/

Code Explicação:

  • Code linha 2: Declarando a variável 'b' como do tipo de dados 'NUMBER'.
  • Code linha 4: Exibição da mensagem "Programa iniciado".
  • Code linha 5: A palavra-chave 'FOR' marca o início do laço e a variável de laço 'a' é declarada. Ela agora assume valores de 1 a 3.
  • Code linha 7: Redefinindo o valor de 'b' para '1' a cada vez.
  • Code linha 8: O interior loop while verifica a condição a>=b.
  • Code linha 10: Imprime o valor de 'a' desde que a condição acima seja satisfeita.
  • Code linha 14: Imprimir a mensagem "Programa concluído".

Laço FOR e laço FOR INVERTIDO

Por padrão, um loop FOR conta de baixo para cima, do limite inferior para o limite superior. Adicionar a palavra-chave REVERSE faz com que ele conte de cima para baixo, enquanto continua contando.ping Os limites na mesma ordem. Ambas as formas são mostradas juntas abaixo para que a diferença fique clara.

Contato cabeçalho Ordem dos valores
Crescente PARA UM EM 1 .. 5 1, 2, 3, 4, 5
Descendente PARA UM EM REVERSO 1 .. 5 5, 4, 3, 2, 1

Observe que, mesmo com REVERSE, o limite inferior ainda é escrito antes do limite superior; apenas a direção da iteração muda. Para loops cuja contagem não é conhecida antecipadamente, o loop básico é a melhor escolha.

Perguntas Frequentes

Não. O laço FOR declara sua variável implicitamente, e ela existe apenas dentro do laço. Declarar uma variável com o mesmo nome fora do laço não afeta a variável usada pelo laço.

A função REVERSE faz com que o loop itere do limite superior para o limite inferior. Os limites ainda são escritos do menor para o maior; apenas a ordem em que os valores são visitados é invertida.

Use um laço FOR quando o número de iterações for conhecido antecipadamente, como um intervalo fixo. Use um laço WHILE quando o laço precisar continuar enquanto uma condição for verdadeira e a contagem não for fixa.

Sim, quando o loop básico simplesmente conta entre dois valores fixos. A IA pode substituir o contador manual e o comando EXIT por um loop FOR com intervalo, tornando o código mais curto. Confirme se os limites correspondem aos originais.

Não. A variável de loop é somente leitura dentro do loop, portanto, atribuir um valor a ela gera um erro de compilação. Para alterar o fluxo, use uma variável separada ou saia do loop com EXIT.

Resuma esta postagem com: