Dada a seguinte função do Oracle:
create or replace FUNCTION nullFunction(a NUMBER) RETURN NUMBER IS
varX NUMBER;
BEGIN
select 1 into varX from dual where exists(select 1 from dual where a = 1);
IF (varX = 1) THEN RETURN 1;
ELSE RETURN 0;
END IF;
END;
Em seguida, chamei-o de uma planilha do Oracle SQL Developer:
select nullFunction(3) from dual
retorna (null)
.
Em seguida, modifiquei minha função para:
create or replace FUNCTION nullFunction(a NUMBER) RETURN NUMBER IS
varX NUMBER;
BEGIN
select 1 into varX from dual where exists(select 1 from dual where a = 1);
IF (varX is NULL) THEN RETURN 0;
ELSE RETURN 1;
END IF;
END;
Mas recebi a mesma saída ao chamá-lo com um valor de 3
- null
.
Por que retorna NULL
? Eu esperava que ele tivesse retornado 0
desde varX
, que estou assumindo ser igual a null
, como parte do else
.
Se você passar qualquer número, exceto o número 1, seu select não retornará nenhum dado e gerará uma exceção no_data_found. Não tenho certeza do que você deseja fazer, mas uma solução simples seria adicionar uma exceção.
Como alternativa, reestruture a seleção de dual para que ela não possa retornar um no_data_found.