Fiz sem o uso da variável v_id, creio que também funcionou.
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)
IS
v_valor_total produto_venda_exercicio.valor_total%TYPE;
v_venda_total produto_venda_exercicio.valor_total%TYPE := 0;
CURSOR cur_produto_venda IS SELECT id FROM produto_venda_exercicio;
BEGIN
FOR linha_cursor IN cur_produto_venda LOOP
SELECT valor_total INTO v_valor_total FROM produto_venda_exercicio WHERE id = linha_cursor.id;
v_venda_total := v_venda_total + v_valor_total;
IF v_venda_total >= p_venda_limite THEN
p_id_retorno := linha_cursor.id;
EXIT;
END IF;
END LOOP;
END;
SET SERVEROUTPUT ON;
DECLARE
v_num INTEGER;
BEGIN
soma_vendas_cursor_for(20000, v_num);
dbms_output.put_line(v_num);
END;