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;