Estruturas de Repetição (Laço)
Autor: Prof. Paulo Kaupa
Para um melhor entendimento dos códigos abordados neste artigo é necessário conhecimentos relacionados a variáveis e blocos de códigos.
As estruturas de Repetição são constantemente utilizadas em programas quando existe a necessidade de executar um trecho de código repetidas vezes (até que uma condição seja alcançada), permitindo ao programador controlar a execução de trechos de um determinado código.
As estruturas de Repetição disponíveis no PL/SQL são: LOOP (básico), WHile-LOOP e FOR LOOP. Estas estruturas são executadas repetidas vezes até que um critério seja alcançado, caso nenhum critério for informado ou este critério for inválido o bloco entrará em uma execução infinita, podendo acarretar em problemas como o travamento do equipamento que estiver executando o código.
Cada execução do trecho de código contido na estrutura de repetição recebe o nome de iteração.
Estrutura Loop (básico)
O Loop é a estrutura de repetição mais simples entre as três estruturas disponíveis no PL/SQL. Com o uso desta estrutura primeiro um trecho de código é executado e só então a condição de saída é testada. Assim o código será executado ao menos uma vez, mesmo que a condição de saída seja atingida já na primeira execução.
Sintaxe :
LOOP
<código a ser executado>;
EXIT WHEN Condição de Saída;
END LOOP;
Após a condição de saída ser atingida o código segue o fluxo conforme programado.
Exemplo 1:
SET SERVEROUTPUT ON;
DECLARE
v_mensagem VARCHAR(40):='Olá Mundo';
v_contador NUMBER(38);
BEGIN
v_contador := 0;
LOOP
DBMS_OUTPUT.PUT_LINE (v_mensagem);
v_contador := v_contador + 1;
EXIT WHEN v_contador = 3;
END LOOP;
END;
No Exemplo 1, a mensagem “Olá Mundo” será impressa na tela 3 vezes.
Nota: A omissão do critério de saída ou um critério inválido, esta instrução será executada infinitamente.
Exemplo de critério de saída Inválido:
1 = 1
O código será executado sempre que a condição for verdadeira, ou seja, um sempre será igual a um, o código será executado infinitamente.
Estrutura WHILE
Esta estrutura de repetição realiza um teste antes de iniciar a execução de um trecho de código, ou seja, o código será executado até que a condição testada seja falsa.
Sintaxe :
WHILE <condição> LOOP
< código a ser executado > ;
END LOOP;
Enquanto a condição estabelecida for verdadeira a repetição (loop) será executada. Assim que a condição for falsa ou nula, o programa sai do laço e continuará a executar o restante do programa.
Exemplo 2:
SET SERVEROUTPUT ON;
DECLARE
v_mensagem VARCHAR(40):='Olá Mundo';
v_contador NUMBER(38);
BEGIN
v_contador := 1;
WHILE v_contador <=3 LOOP
DBMS_OUTPUT.PUT_LINE (v_mensagem);
v_contador := v_contador + 1;
END LOOP;
END;
Observe que os Exemplos 1 e 2 imprimem a mensagem “Olá Mundo” 3 vezes na tela. Porém se a variável v_contador for inicializada com o valor 4, a mensagem Olá Mundo será impressa apenas pela estrutura Loop (básico) e será impressa uma única vez.
Nota: Caso a condição para a execução for sempre verdadeira, o código será executado infinitamente, podendo causar problemas como travamento no equipamento que estiver executando o programa.
Estrutura FOR
Quando existir a necessidade de executar um trecho de código por determinadas vezes usa-se a estrutura FOR, ou seja quando o número de iterações é conhecido.
Sintaxe :
FOR <variável> in <valor inicial> .. <valor final> LOOP
< código a ser executado > ;
END LOOP;
Exemplo 3:
SET SERVEROUTPUT ON;
DECLARE
v_contador NUMBER(38);
BEGIN
FOR v_contador in 0 .. 20 LOOP
DBMS_OUTPUT.PUT_LINE (v_contador);
END LOOP;
END;
No exemplo 3, deseja-se imprimir na tela valores de 0 até 20.
Exemplo 4:
SET SERVEROUTPUT ON;
DECLARE
v_contador NUMBER(38);
v_contadorInicial NUMBER(38);
v_contadorFinal NUMBER(38);
BEGIN
v_contadorInicial :=1;
v_contadorfinal := 10;
FOR v_contador in v_contadorInicial .. v_contadorfinal LOOP
DBMS_OUTPUT.PUT_LINE (v_contador);
END LOOP;
END;
No exemplo 4, deseja-se imprimir na tela valores informados entre duas varáveis.
Exercício proposto (Estruturas de Repetição)
1 – Crie uma tabela chamada TB_NOTA, que contenha os campos:
COD_NOTA NUMBER(38)
NOTA CHAR (1)
DESCRICAO VARCHAR2(20)
2 – Insira na TB_NOTA os seguintes valores:
NOTA |
DESCRIÇÃO |
A |
Excelente |
B |
Muito Bom |
C |
Bom |
D |
Ruim |
E |
Muito Ruim |
3 – Utilizando uma das estruturas de repetição apresentadas neste artigo elabore um bloco de código que imprima na tela todo o conteúdo da tabela TB_NOTA.