1
resposta

Fiz o teste baseado em eliminatória.

CREATE OR REPLACE FUNCTION obter_categoria (
  p_fat_prev IN cliente.faturamento_previsto%TYPE
) RETURN cliente.categoria%TYPE IS
BEGIN
  IF p_fat_prev < 10000 THEN RETURN 'PEQUENO';
  END IF;
  IF p_fat_prev < 50000 THEN RETURN 'MÉDIO';
  END IF;
  IF p_fat_prev < 100000 THEN RETURN 'MÉDIO GRANDE';
  END IF;
  RETURN 'GRANDE';
END;

Fiz o teste baseado em eliminatória, já que o return teóricamente cancela qualquer código após ele, depois de executado

1 resposta

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!