1
resposta

MINHA RESOLUÇÃO

Bom dia a todos,

Após o exercício anterior começando a criar funções dentro de procedures, esse acabou ficando mais fácil e concluí bem mais rapidamente e com mais facilidade, fico feliz porque mostra evolução e aprendizado, quero seguir buscando mais conhecimento nos próximos cursos.

Pois bem, iniciei primeiramente, como deveria calcular Preço * Quantidade e Já temos a função de retorna_imposto, primeiramente eu criei uma função chamada Calcular_Preco, que serviria justamente para substituir o Valor_total por essa função automática.

CREATE OR REPLACE FUNCTION CALCULAR_PRECO
(p_QUANTIDADE PRODUTO_VENDA_EXERCICIO.QUANTIDADE%type,
p_PRECO PRODUTO_VENDA_EXERCICIO.PRECO%type)
RETURN PRODUTO_VENDA_EXERCICIO.VALOR_TOTAL%type
IS
    v_VALOR_TOTAL PRODUTO_VENDA_EXERCICIO.VALOR_TOTAL%type;
BEGIN
    v_VALOR_TOTAL := p_QUANTIDADE * p_PRECO;

RETURN v_VALOR_TOTAL;
END CALCULAR_PRECO;

Depois chamei e reconferi a função Retorna_imposto para ver se estava tudo OK

CREATE OR REPLACE FUNCTION RETORNA_IMPOSTO 
(p_CODIGO IN PRODUTO_VENDA_EXERCICIO.COD_PRODUTO%type)
RETURN PRODUTO_VENDA_EXERCICIO.PERCENTUAL_IMPOSTO%type
IS
    v_CATEGORIA PRODUTO_EXERCICIO.CATEGORIA%type;
    v_IMPOSTO PRODUTO_VENDA_EXERCICIO.PERCENTUAL_IMPOSTO%type;
BEGIN
    v_CATEGORIA := UPPER(TRIM(RETORNO_CATEGORIA(p_CODIGO))); 
    IF v_CATEGORIA = 'SUCOS DE FRUTAS' THEN
       v_IMPOSTO := 10;
    ELSIF v_CATEGORIA = 'ÁGUAS' THEN
          v_IMPOSTO := 20;
    ELSIF  v_CATEGORIA = 'MATE' THEN 
           v_IMPOSTO := 15;
    ELSE   v_IMPOSTO := 0;
END IF;
RETURN v_IMPOSTO;
END RETORNA_IMPOSTO;

E por fim modifiquei a Procedure com que fez que ambas as funções calculassem automaticamente as váriaveis

CREATE OR REPLACE PROCEDURE INCLUINDO_DADOS_VENDA
(p_ID PRODUTO_VENDA_EXERCICIO.ID%type,
p_COD_PRODUTO PRODUTO_VENDA_EXERCICIO.COD_PRODUTO%type,
p_DATA PRODUTO_VENDA_EXERCICIO.DATA%type,
p_QUANTIDADE PRODUTO_VENDA_EXERCICIO.QUANTIDADE%type,
p_PRECO PRODUTO_VENDA_EXERCICIO.PRECO%type)
IS
    v_VALOR_TOTAL PRODUTO_VENDA_EXERCICIO.VALOR_TOTAL%type;
    v_PERCENTUAL_IMPOSTO PRODUTO_VENDA_EXERCICIO.PERCENTUAL_IMPOSTO%type;
BEGIN
    v_VALOR_TOTAL := CALCULAR_PRECO(p_QUANTIDADE, p_PRECO);
    v_PERCENTUAL_IMPOSTO := RETORNA_IMPOSTO(p_COD_PRODUTO);
    
    INSERT INTO PRODUTO_VENDA_EXERCICIO
    (ID, COD_PRODUTO, DATA, QUANTIDADE, PRECO, VALOR_TOTAL, PERCENTUAL_IMPOSTO)
    VALUES
    (p_ID, p_COD_PRODUTO, p_DATA, p_QUANTIDADE, p_PRECO, v_VALOR_TOTAL, v_PERCENTUAL_IMPOSTO);
    COMMIT;
END;

Depois fiz um EXECUTE para inserir o cliente informado no exercício.

EXECUTE INCLUINDO_DADOS_VENDA (2, '92347', TO_DATE('01/01/2022','DD/MM/YYYY'), 200, 25); 

Por fim fiz o SELECT para conferir o resultado, e foi calculado ambas as funções automaticamente conforme desejado.

SELECT * FROM PRODUTO_VENDA_EXERCICIO;

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá Adriano, como vai?

Obrigada por compartilhar sua resolução aqui no fórum! Com certeza vai ajudar outros alunos que passarem pela mesma atividade.

Ficou muito bacana ver a sua abordagem: em vez de calcular o preço diretamente dentro da procedure, você criou a função CALCULAR_PRECO separada, o que deixa o código mais organizado e reutilizável. Essa separação de responsabilidades é exatamente o tipo de decisão que faz diferença em projetos maiores.

E perceber que o exercício ficou mais fácil que o anterior é um sinal claro de que o aprendizado está acontecendo de verdade. Continue com esse ritmo nos próximos módulos!

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade