1
resposta

Resolução: criar cursor com while

Segue minha resolução:

CREATE OR REPLACE PROCEDURE SOMA_VENDAS_CURSOR_WHILE 
(
   p_VENDA_LIMITE IN produto_venda_exercicio.valor_total%TYPE, 
   p_ID_RETORNO   OUT produto_venda_exercicio.id%TYPE
)
IS
   CURSOR cur_VENDA IS 
      SELECT ID, VALOR_TOTAL
      FROM PRODUTO_VENDA_EXERCICIO;
      
   v_ID          produto_venda_exercicio.id%TYPE;
   v_VALOR_TOTAL produto_venda_exercicio.valor_total%TYPE;
   v_VENDA_TOTAL produto_venda_exercicio.valor_total%TYPE := 0;
BEGIN
   OPEN cur_VENDA;
   FETCH cur_VENDA INTO v_ID, v_VALOR_TOTAL;
   
   WHILE cur_VENDA%FOUND LOOP
      v_VENDA_TOTAL := v_VENDA_TOTAL + v_VALOR_TOTAL;
      
      IF v_VENDA_TOTAL >= p_VENDA_LIMITE THEN
         EXIT;
      END IF;
      
      FETCH cur_VENDA INTO v_ID, v_VALOR_TOTAL;
   END LOOP;
   
   CLOSE cur_VENDA;
   
   p_ID_RETORNO := v_ID;
END;
/
1 resposta

Olá, Diogenes! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de cursores para percorrer registros em PL/SQL, criou muito bem a lógica de controle com o laço WHILE e ainda compreendeu a importância da condição de saída para evitar processamento desnecessário.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Sugestão de conteúdo para você mergulhar ainda mais no tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!