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.
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.
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:
- Instrução de loop básico
- Para instrução de loop
- Instrução de loop while
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.
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.
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.
<<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.
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".







