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
CURSOR v_alunos IS (select nome, turma, nota
from alunos);
BEGIN
FOR v_aluno IN v_alunos
LOOP
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;
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:
CREATE TABLE "alunos" (
"NOME" VARCHAR2(60 char),
"TURMA" VARCHAR2(50 char),
"NOTA" NUMBER(4,2)
);
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