1
resposta

Resolução Exercício

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_VLR_TOTAL produto_venda_exercicio.valor_total%type;
 v_VENDA produto_venda_exercicio.valor_total%type := 0;
   CURSOR cur_VENDA IS SELECT ID FROM produto_venda_exercicio;
BEGIN
    OPEN cur_Venda;
LOOP
    FETCH cur_Venda INTO v_ID;
    SELECT VLR_TOTAL INTO v_VLR_TOTAL FROM produto_venda_exercicio
    WHERE ID = v_ID;
v_VENDA := v_VENDA + v_VLR_TOTAL;
IF v_VLR_TOTAL >= p_VENDA_LIMITE THEN 
    EXIT;
END IF;
    EXIT WHEN cur_Venda%NOTFOUND;
END LOOP;
    CLOSE cur_Venda;
END;
1 resposta

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 ✓.