Oii, Matheus, tudo bem?
Dei uma olhadinha no seu código, e só tem um coisinha a notar: você esqueceu de retornar o ID quando o total das vendas atinge o limite especificado. Um exemplo pode ser assim de como ficaria:
create or replace procedure SOMA_VENDAS_CURSOR
(p_VENDA_LIMITE IN produto_venda_exercicio.valor_total%type, p_ID_RETORNO OUT produto_venda_exercicio.id%type)
IS
v_ID produto_venda_exercicio.id%type;
v_VLR_TOTAL produto_venda_exercicio.valor_total%type;
v_VENDA_TOTAL produto_venda_exercicio.valor_total%type := 0;
CURSOR cur_VENDA IS SELECT ID, VALOR_TOTAL FROM produto_venda_exercicio ORDER BY ID;
BEGIN
OPEN cur_VENDA;
LOOP
FETCH cur_VENDA INTO v_ID, v_VLR_TOTAL;
EXIT WHEN cur_VENDA%NOTFOUND;
v_VENDA_TOTAL := v_VENDA_TOTAL + v_VLR_TOTAL;
IF v_VENDA_TOTAL >= p_VENDA_LIMITE THEN
p_ID_RETORNO := v_ID;
EXIT;
END IF;
END LOOP;
CLOSE cur_VENDA;
END;
Se outra dúvida surgir, estamos disponíveis.
Abraços e bons estudos! :)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.