1
resposta

MINHA RESOLUCAO

Bom dia a todos,
Essa sofri pra fazer, achei diferente, mas consegui, olhei alguns códigos , estudei e fiz perguntas , pedi ajuda para IA me explicar o que estava acontecendo, fui fuçando e saiu. O que embaralhou minha mente foi porque a função estava misturando coisas da tabela PRODUTO_EXERCICIO com coisas da tabela PRODUTO_VENDA_EXERCICIO, deu certo o código, mas ainda estou com um pouco de dúvida, se puderem me detalhar um pouco mais e se de fato o código está certo agradeço muito.

Segue abaixo:

CREATE OR REPLACE FUNCTION RETORNA_IMPOSTO 
(p_CODIGO IN PRODUTO_EXERCICIO.COD%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;
VARIABLE g_PERCENTUAL_IMPOSTO NUMBER
EXECUTE :g_PERCENTUAL_IMPOSTO := RETORNA_IMPOSTO(67120)
PRINT G_PERCENTUAL_IMPOSTO;
1 resposta

Oi, Adriano! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Sua solução ficou coerente e deu para perceber o quanto você se dedicou para entender a lógica entre as tabelas e a função.

Sobre sua dúvida, a função utiliza informações da tabela PRODUTO_EXERCICIO para descobrir a categoria e depois retorna um valor baseado no tipo definido em PRODUTO_VENDA_EXERCICIO. Ou seja, uma tabela fornece os dados de consulta e a outra define o tipo do valor retornado.

Além disso, foi interessante você usar UPPER(TRIM()), pois isso ajuda a evitar erros com espaços e diferenças entre letras maiúsculas e minúsculas.

Uma dica interessante para o futuro é usar a estrutura CASE, que pode deixar esse tipo de validação mais organizada quando existem várias condições. Veja este exemplo:


CREATE OR REPLACE FUNCTION retorna_imposto
(p_categoria IN VARCHAR2)

RETURN NUMBER

IS
    v_imposto NUMBER;
BEGIN

    CASE p_categoria
        WHEN 'SUCOS DE FRUTAS' THEN v_imposto := 10;
        WHEN 'AGUAS' THEN v_imposto := 20;
        WHEN 'MATE' THEN v_imposto := 15;
        ELSE v_imposto := 0;
    END CASE;

    RETURN v_imposto;
END;

Neste exemplo, o CASE verifica a categoria e define o imposto correspondente de forma mais organizada e fácil de manter.

Como está sendo sua experiência aprendendo PL/SQL até agora?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!