1
resposta

[Sugestão] Resolução do exercício - Soma Vendas

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.

1 resposta

Olá Carlos, tudo bem?

Obrigada por compartilhar seu processo e sua resolução com o fórum! Fico feliz que tenha solucionado os problemas e construído sua procedure com sucesso. Continue praticando e aplicando os conceitos aprendidos.

Caso surjam dúvidas, estaremos por aqui.

Abraços.