Olá Victor, tudo bem?
Desculpe pela demora em obter retorno.
Você mencionou que fez um teste baseado em eliminação e notou que o uso do "return
" cancela qualquer código após ele. De fato, quando uma das condições é verdadeira e a instrução "RETURN
" é executada, o valor correspondente à categoria é retornado e a função é finalizada. Isso significa que, se uma condição é satisfeita e ocorre o retorno, as condições subsequentes não serão avaliadas.
Quanto ao seu código tenho uma sugestão de melhoria.
Após a seção "IS", você pode declarar uma variável que armazenará o valor da categoria do cliente:
IS
v_CATEGORIA CLIENTE.CATEGORIA%type;
E em cada condição armazenar o valor correspondente na variável.
Além disso, como temos mais de um IF
, a cláusula END IF
é indicado utilizá-la no fechamento do bloco de IF's. E utilizaremos o ELSIF
para as condições seguintes após o primeiro IF
.
BEGIN
IF p_fat_prev < 10000 THEN
v_CATEGORIA := 'PEQUENO';
ELSIF p_fat_prev < 50000 THEN
v_CATEGORIA := 'MÉDIO';
ELSIF p_fat_prev < 100000 THEN
v_CATEGORIA := 'MÉDIO GRANDE';
ELSE
v_CATEGORIA := 'GRANDE';
END IF;
RETURN v_CATEGORA;
Dessa forma, teremos apenas um ponto de retorno, tornando o código mais legível e organizado.
Victor, aproveito esse momento para informar que esse curso ganhou uma versão atualizada: Oracle PL/SQL: procedures, funções e exceções.
Espero ter ajudado a esclarecer sua dúvida.
Se precisar de mais ajuda, fico à disposição.
Abraços e até mais!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!