Como o exercicio pediu para resolver com um FOR e um Exit dentro do loop, minha resolução ficou da seguinte forma:
CREATE OR REPLACE PROCEDURE SOMA_VENDAS(p_VALOR_TOTAL PRODUTO_VENDA_EXERCICIO.VALOR_TOTAL%TYPE) IS
v_VALOR_VENDA PRODUTO_VENDA_EXERCICIO.VALOR_TOTAL%TYPE;
v_VALOR_TOTAL PRODUTO_VENDA_EXERCICIO.VALOR_TOTAL%TYPE := 0;
v_ID PRODUTO_VENDA_EXERCICIO.ID%TYPE := 1;
v_INTERACOES INTEGER;
v_ID_ATUAL PRODUTO_VENDA_EXERCICIO.ID%TYPE;
BEGIN
SELECT COUNT(*) INTO v_INTERACOES FROM PRODUTO_VENDA_EXERCICIO;
FOR v_ID IN 1..v_INTERACOES LOOP
SELECT P.ID, P.VALOR_TOTAL INTO v_ID_ATUAL, v_VALOR_VENDA FROM produto_venda_exercicio P WHERE P.ID = v_ID;
v_VALOR_TOTAL := v_VALOR_TOTAL + v_VALOR_VENDA;
dbms_output.put_line('Valor Venda => ' || v_VALOR_VENDA);
dbms_output.put_line('Valor Total => ' || v_VALOR_TOTAL);
dbms_output.put_line('ID Atual => ' || v_ID_ATUAL);
IF v_VALOR_TOTAL >= p_VALOR_TOTAL THEN
dbms_output.put_line('A partir da venda ' || v_ID_ATUAL);
EXIT;
END IF;
END LOOP;
END SOMA_VENDAS;
Obs.: A resolução está com um teste de mesa para cada variável dentro do loop, pois tive um problema no início, a variável "v_VALOR_TOTAL" não estava funcionando da maneira esperada, ficava sempre zerada. Depois de quebrar a cabeça um pouco, lembrei que tinha que inicializar a variável, após isso funcionou corretamente. Optei por deixar tudo dentro da Procedure e só chamá-la passando o Valor Total como parâmetro.