Translate

Estruturas de Repetição (Laços)

Estruturas de Repetição (Laços)

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.

Sobre o Autor:

Mestre em Engenharia de Produção pela Universidade Nove de Julho. Bacharel em Ciência da Computação também pela Universidade Nove de Julho. Atualmente é Professor de ensino superior (Universidade Nove de Julho), Analista de Sistemas na Empresa Atento e Pesquisador na área de Inteligência Computacional aplicada em investimentos na Bolsa de Valores de São Paulo. Possui experiência em Análise e desenvolvimento de sistemas, aplicações de Inteligência Computacional no Mercado de Ações, Análise Técnica para seleção de ações para investimentos na Bolsa de Valores. Curriculo Lattes: http://lattes.cnpq.br/0074185478343196