Skip to Main Content

Portuguese

Announcement

For appeals, questions and feedback, please email oracle-forums_moderators_us@oracle.com

Como percorrer tabelas usando "FOR" e "LOOP" com PL/SQL

Rodrigo de limaJan 7 2024 — edited Jan 8 2024

Olá fiz este post para ajudar, quem procura percorrer dados de uma tabela de forma interativa. Espero que ajude!!

A criação de listas pode ser muito útil dependendo da necessidade que você tiver na criação de uma solução para o seu programa ou sistema.

Tendo em vista essa necessidade é importante interagir com os dados de uma tabela de uma forma mais interativa, personalizando resultados ou até mesmo criando ações para cada um dos resultados no laço que for criado.

Para lidar com o loop abaixo vou utilizar um CURSOR, Um cursor é uma estrutura de controle que permite percorrer os resultados de uma consulta SQL de forma iterativa. Ele atua como um ponteiro para as linhas retornadas por uma consulta, permitindo o acesso e manipulação de dados de maneira eficiente e individual.

Situação Prática: Controle de Aprovação e Reprovação de Alunos

Imagine que você trabalha em uma instituição de ensino e precisa automatizar o processo de notificação de alunos aprovados e reprovados. O banco de dados contém uma tabela chamada "alunos" com informações sobre o nome, turma e nota de cada aluno em diferentes disciplinas.

Objetivo: Desenvolver um script PL/SQL que percorra a tabela de alunos, identificando aqueles que foram aprovados ou reprovados, e envie notificações personalizadas com base em suas notas.

DECLARE 
-- Declare a variável do tipo CURSOR 
CURSOR v_alunos IS (select nome, turma, nota 
from alunos); 
BEGIN 
-- Percorra a variável de alunos aprovados usando o FOR 
-- No LOOP, todas as colunas do cursor estarão acessíveis através 
-- da chamada "v_aluno.nome_da_coluna" 
FOR v_aluno IN v_alunos 
LOOP 
-- Defina condições para exibir mensagens sobre o aluno 
-- Verifique se o aluno está "Aprovado" 
IF v_aluno.nota >= 7.5 THEN 
dbms_output.put_line( 
'Parabéns, ' ||v_aluno.nome || 
' você foi APROVADO na turma "' || v_aluno.turma || '".' 
); 
END IF; 
-- Verifique se o aluno está "Reprovado" 
IF v_aluno.nota < 7.5 THEN 
dbms_output.put_line( 
'Infelizmente, ' ||v_aluno.nome || 
' você foi REROVADO na turma "' || v_aluno.turma || '".' 
); 
END IF; 
END LOOP; 
END;

Após executar essa lógica o seu retorno será algo como neste print:

Tabela e dados fictícios para testes:

--Tabela 
CREATE TABLE "alunos" ( 
"NOME" VARCHAR2(60 char), 
"TURMA" VARCHAR2(50 char), 
"NOTA" NUMBER(4,2) 
); 
--Dados fictícios 
INSERT INTO ALUNOS (NOME, TURMA, NOTA) VALUES 
('João Silva', 'Programação Orientada a Objetos', 8.5), 
('Maria Oliveira', 'Banco de Dados Avançado', 7.9), 
('Carlos Santos', 'Estruturas de Dados', 6.8), 
('Ana Souza', 'Redes de Computadores', 9.2), 
('Rodrigo Pereira', 'Sistemas Operacionais', 7.1), 
('Patrícia Lima', 'Inteligência Artificial', 8.3), 
('Lucas Mendes', 'Algoritmos Avançados', 6.5), 
('Juliana Costa', 'Segurança da Informação', 9.5), 
('Fernando Oliveira', 'Desenvolvimento Web', 8.0), 
('Camila Rocha', 'Linguagens de Programação', 7.4);

Links úteis:

https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/cursor-FOR-LOOP-statement.html#GUID-62C9A3C8-8
https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/FOR-LOOP-statement.html#GUID-D00F8F0B-ECFC-48B6-B399-D8B5114E7E21

This post has been answered by Mike Kutz on Jan 7 2024
Jump to Answer
Comments
Post Details
Added on Jan 7 2024
5 comments
129 views