1
resposta

[Sugestão] Resolução da atividade

Outra opção seria utilizar o FOR sem a necessidade da consulta. Adicionei um parâmetro para informar a saída do último ID e do valor também.

create or replace PROCEDURE SOMA_VENDAS_CURSOR_FOR

(p_VENDA_LIMITE IN produto_venda_exercicio.valor_total%type, 
p_ID_RETORNO OUT produto_venda_exercicio.id%type,
p_RETORNO_VENDA OUT produto_venda_exercicio.valor_total%type)

IS
   v_ID produto_venda_exercicio.id%type := 1;
   v_VENDA_TOTAL produto_venda_exercicio.valor_total%type := 0;
   CURSOR cur_VENDA IS SELECT ID,VALOR_TOTAL FROM PRODUTO_VENDA_EXERCICIO;
   
BEGIN
   FOR i IN cur_VENDA LOOP
        
     v_ID := i.ID ;
     v_VENDA_TOTAL := v_VENDA_TOTAL + i.VALOR_TOTAL;
     
         IF v_VENDA_TOTAL >= p_VENDA_LIMITE THEN
         EXIT;
         END IF;
                  
    END LOOP;
   
   p_ID_RETORNO := v_ID;
   p_RETORNO_VENDA := v_VENDA_TOTAL;
END;
SET SERVEROUTPUT ON;
DECLARE
   v_NUM INTEGER;
   v_VENDA INTEGER;
BEGIN
   SOMA_VENDAS_CURSOR_FOR(20000,v_NUM,v_VENDA);
   dbms_output.put_line('ID: '|| v_NUM || ' Venda: ' || v_VENDA);
END;
1 resposta

Boa, Luan!

Realmente, existem muitas formas possíveis de se chegar a um mesmo resultado. Obrigada por compartilhar sua resolução com o fórum!

Continue praticando. Abraços.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software