2
respostas

Resolução do exercicio

O exercicio pedia um FOR, no resultado não tem o for...

Ficou assim:

CREATE OR REPLACE PROCEDURE META_VENDAS (p_meta IN FLOAT, p_soma_vendas OUT FLOAT, p_id_retorno OUT number)
IS
   v_soma_vendas FLOAT := 0;
   v_vendas number;
   v_valor_venda produto_venda_exercicio.valor_total%type;

BEGIN
   SELECT COUNT(*) into v_vendas FROM produto_venda_exercicio;  
    for v_contador in 1..v_vendas loop
       SELECT produto_venda_exercicio.valor_total into v_valor_venda 
       from produto_venda_exercicio where produto_venda_exercicio.id = v_contador;
       v_soma_vendas := v_soma_vendas + v_valor_venda;    
       IF v_soma_vendas >= p_meta THEN
            p_id_retorno := v_contador;
            p_soma_vendas :=  v_soma_vendas;
        exit;
       end if; 
     END LOOP;  
END;


SET SERVEROUTPUT ON;
DECLARE
   p_soma_vendas FLOAT;
   p_id_retorno number;
BEGIN
   META_VENDAS(20000, p_soma_vendas, p_id_retorno);
   dbms_output.put_line(p_soma_vendas || ' - ' || p_id_retorno);
END;
2 respostas

Carolina,

Era possível fazer o exercício sem o FOR, desde que fosse utilizada a cláusula EXIT WHEN, para que saísse quando atingisse o valor de v_vendas.

Concorda?

Concordo sim! Só postei porque o enunciado pedia para ter um FOR e a solução não tinha.