Oracle LOOP PL/SQL com exemplo

⚡ Resumo Inteligente

Os loops em PL/SQL executam uma seção de código repetidamente pelo número de vezes desejado. O PL/SQL oferece loops básicos, FOR e WHILE, controlados por CONTINUE, EXIT, EXIT WHEN e GOTO, e os loops podem ser rotulados para gerenciar estruturas aninhadas de forma organizada.

  • 🔁 Objetivo: Um loop executa um bloco de código várias vezes, reduzindo o tamanho e a complexidade do código.
  • 🧭 Contador de Loops: Uma variável contadora define a condição do loop e precisa ser alterada para que o loop possa ser encerrado.
  • ⏭️ PROSSEGUIR: Ignora o restante da iteração atual e inicia a próxima.
  • 🚪 SAÍDA / SAÍDA QUANDO: Sai do loop imediatamente, opcionalmente quando uma condição booleana for verdadeira.
  • 🏷️ Rótulos: Um rótulo de loop entre colchetes angulares duplos permite que o comando EXIT direcione para um loop externo.
  • ♾️ Loop básico: O programa é executado até que um comando de SAÍDA explícito seja encontrado; sem ele, o programa entra em loop infinito.
  • 🧩 Três tipos: Os loops básicos, como o loop FOR e o loop WHILE, abrangem os padrões comuns.

Oracle Loop PL/SQL

O que são laços?

Os loops permitem que uma determinada parte do código de um programa seja executada o número desejado de vezes. Neste tutorial, vamos analisar o conceito de loop em PL/SQL e o fluxo de controle em loops.

Introdução ao conceito de loops

O conceito de loops oferece as seguintes vantagens na programação:

  • Reutilização de código.
  • Tamanho de código reduzido.
  • Fluxo de controle fácil.
  • Complexidade reduzida.

O diagrama abaixo mostra o vaso sanitário.ping conceito.

Looping Fluxograma de conceitos em PL/SQL

No diagrama acima, a condição do loop é verificada e, enquanto for satisfeita, o bloco de execução é executado.

Em cada iteração, a variável contadora do loop, que define a condição do loop, deve ser alterada para que o controle saia do loop. Em alguns casos, esse contador é um incremento ou decremento de um valor predefinido, e em outros, é uma condição de busca que continua executando o bloco até que seja satisfeita.

Declarações de controle de loop

Antes de aprender o conceito de laços de repetição, é importante aprender as instruções de controle de laço. Essas instruções controlam o fluxo de execução dentro de um laço.

CONTINUAR

Essa palavra-chave instrui o mecanismo PL/SQL a ignorar o restante do código no bloco de execução e iniciar a próxima iteração imediatamente sempre que encontrar um CONTINUE dentro de um loop. Isso é usado principalmente quando o código dentro do loop deve ser ignorado para determinados valores de iteração.

SAIR / SAIR QUANDO

Esta palavra-chave instrui o mecanismo PL/SQL a sair imediatamente do loop atual. Em um loop aninhado, EXIT no loop interno encerra apenas o loop interno, não o externo. 'EXIT WHEN' é seguido por uma expressão que retorna um valor booleano; se o resultado for TRUE, o controle é encerrado.

GOTO

Esta instrução transfere o controle para uma instrução rotulada (“GOTO ;”). Ela possui as seguintes restrições:

  • A transferência de controle só pode ser feita dentro dos subprogramas.
  • A transferência de controle não pode ser feita da parte de tratamento de exceções para a parte de execução.

O uso desta declaração não é recomendado, a menos que não haja alternativa, porque o controle de código tracA capacidade de execução torna-se muito difícil quando o controle é transferido de uma parte para outra.

Tipos de loop em PL/SQL

PL/SQL Oferece os seguintes três tipos de loops:

A tabela abaixo compara os três antes que o loop básico seja abordado em detalhes.

laço Critério de saída Melhor usado quando
Loop básico Saída explícita no bloco A saída não se baseia em uma contagem ou condição fixa.
laço FOR O contador atinge o limite de sua faixa de operação. O número de iterações é conhecido antecipadamente.
ENQUANTO loop A condição torna-se falsa. O loop deve ser executado enquanto uma condição for verdadeira.

Declaração de Loop Básico

Esta é a estrutura de loop mais simples em PL/SQL. O bloco de execução começa com a palavra-chave 'LOOP' e termina com 'END LOOP'. A condição de saída deve ser fornecida dentro do bloco de execução para que o controle saia do loop, e a palavra-chave EXIT deve ser fornecida explicitamente.

Estrutura básica de loop em PL/SQL

LOOP
<execution block starts>
<EXIT condition based on developer criteria>
<execution_block_ends>
END LOOP;

Explicação da sintaxe:

  • A palavra-chave 'LOOP' marca o início do loop e 'END LOOP' marca o fim.
  • O bloco de execução contém todo o código que precisa ser executado, incluindo a condição de saída (EXIT).
  • A parte de execução pode conter qualquer instrução executável.

Observação: Uma instrução de repetição básica sem a palavra-chave EXIT é um loop infinito que nunca termina.

1 exemplo: Neste exemplo, imprimimos os números de 1 a 5 usando uma estrutura de repetição básica.

Impressão básica em loop dos números de 1 a 5

DECLARE
a NUMBER:= 1;
BEGIN
dbms_output.put_line('Program started.');
LOOP
dbms_output.put_line(a);
a:= a+1;
EXIT WHEN a>5;
END LOOP;
dbms_output.put_line('Program completed');
END;
/

Code Explicação:

  • Code linha 2: Declarando a variável 'a' como 'NUMBER' e inicializando-a com o valor '1'.
  • Code linha 4: Exibição da mensagem "Programa iniciado".
  • Code linha 5: A palavra-chave 'LOOP' marca o início do loop.
  • Code linha 6: Imprime o valor de 'a'.
  • Code linha 7: Incrementa o valor de 'a' em 1.
  • Code linha 8: Verifica se o valor de 'a' é maior que 5.
  • Code linha 9: A palavra-chave 'END LOOP' marca o fim do bloco de execução.
  • As linhas 6 a 8 continuam a ser executadas até que 'a' chegue a 6, momento em que a condição retorna VERDADEIRO e o controle sai do loop.
  • Code linha 10: Imprimir a mensagem "Programa concluído".

Rotulagem de Loops

Em PL/SQL, os loops podem ser rotulados. O rótulo deve ser delimitado por “<<” e “>>”. Rotular loops, especialmente em loops aninhados, melhora a legibilidade. O rótulo pode ser fornecido em um comando EXIT para sair desse loop específico, permitindo que o controle saia do loop externo de uma estrutura aninhada diretamente com o comando EXIT seguido pelo rótulo do loop externo.

Estrutura de laço aninhado rotulada

<<OUTER_LOOP>>
LOOP
<execution_block_starts>
.
<<INNER_LOOP>>
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.
  • '< >' e '< >' são os rótulos desses loops.

1 exemplo: Neste exemplo, imprimimos números a partir de 1 usando uma estrutura de repetição básica. Cada número é impresso tantas vezes quantas forem suas quantidades. O limite superior da série é definido na declaração da estrutura. Para isso, utilizamos o conceito de rótulo.

Exemplo de loop rotulado - Parte 1Exemplo de loop rotulado - Parte 2

DECLARE
a NUMBER:= 0;
b NUMBER;
upper_limit NUMBER := 4;
BEGIN
dbms_output.put_line('Program started.');
<<outer_loop>>
LOOP
a:= a+1;
b:= 1;
<<inner_loop>>
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:= b+1;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Code Explicação:

  • Code linhas 2-3: Declarando as variáveis ​​'a' e 'b' como do tipo de dados 'NUMBER'.
  • Code linha 4: Declarando a variável 'upper_limit' como 'NUMBER' com o valor '4'.
  • Code linha 6: Exibição da mensagem "Programa iniciado".
  • Code linha 7: O laço externo é rotulado como “outer_loop”.
  • Code linha 9: O valor de 'a' é incrementado em 1.
  • Code linha 11: O loop interno é rotulado como “inner_loop”.
  • Code linha 13: Condição de saída que verifica se 'a' é maior que o valor de 'limite_superior'. Caso contrário, o loop externo prossegue; caso contrário, ele é encerrado diretamente.
  • Code linha 14: Imprimindo o valor de 'b'.
  • Code linha 15: Incrementa o valor de 'b' em 1.
  • Code linha 16: Condição de SAÍDA que verifica se 'b' é maior que 'a'. Se for, o loop interno é encerrado.
  • Code linha 19: Imprimir a mensagem "Programa concluído".

Perguntas Frequentes

EXIT encerra o loop incondicionalmente. EXIT WHEN encerra o loop somente quando a seguinte expressão booleana for verdadeira, o que elimina a necessidade de um IF separado em torno de um EXIT simples.

Um rótulo permite que um comando EXIT em um loop interno saia de um loop externo nomeado em apenas uma etapa. Isso também torna o código aninhado muito mais fácil de ler do que... tracinstruções END LOOP do rei simples.

Se o bloco não tiver um comando de SAÍDA, ou se o contador nunca atingir a condição de saída, o loop nunca termina. Certifique-se sempre de que o contador se mova em direção à condição de SAÍDA QUANDO.

Muitas vezes, sim. A IA pode trace se o contador se move em direção à condição de SAÍDA e avisa quando um loop não tem uma saída alcançável, embora uma saída dependente de dados ainda precise de uma execução de teste para ser confirmada.

O comando CONTINUE ignora o restante da iteração atual e passa para a próxima. É útil quando certos valores devem ser ignorados sem sair completamente do loop.

Resuma esta postagem com: