Criando a procedure
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 := 1;
v_VALOR_TOTAL produto_venda_exercicio.valor_total%type;
v_VENDA_TOTAL produto_venda_exercicio.valor_total%type := 0;
CURSOR cur_VENDA IS SELECT ID FROM PRODUTO_VENDA_EXERCICIO;
BEGIN
OPEN cur_VENDA;
FETCH cur_VENDA INTO v_ID;
WHILE (cur_VENDA%FOUND AND (v_VENDA_TOTAL < p_VENDA_LIMITE)) LOOP
SELECT VALOR_TOTAL INTO v_VALOR_TOTAL FROM PRODUTO_VENDA_EXERCICIO WHERE ID = v_ID;
v_VENDA_TOTAL := v_VENDA_TOTAL + v_VALOR_TOTAL;
IF v_VENDA_TOTAL < p_VENDA_LIMITE THEN
FETCH cur_VENDA INTO v_ID;
END IF;
END LOOP;
CLOSE cur_VENDA;
p_ID_RETORNO := v_ID;
END;
Executando a procedure
SET SERVEROUTPUT ON;
DECLARE
v_NUM INTEGER;
BEGIN
SOMA_VENDAS_CURSOR(20000, v_NUM);
dbms_output.put_line('A venda limite é: '||v_NUM);
END;