No banco de dados Oracle, o
NVL2()
função nos permite substituir valores nulos por outro valor. É semelhante ao
NVL()
função, exceto que ela aceita três argumentos em vez de dois. Isso nos permite especificar um valor diferente para retornar caso o primeiro argumento não seja nulo. Sintaxe
A sintaxe fica assim:
NVL2(expr1, expr2, expr3)
Se
expr1
não é nulo, então NVL2
retorna expr2
. Se expr1
for nulo, então NVL2
retorna expr3
. Exemplo
Segue um exemplo para demonstrar:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Resultado:
3
O primeiro argumento era nulo e, portanto, o terceiro argumento foi retornado.
E aqui está o que acontece quando o primeiro argumento não é nulo:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Resultado:
2
Quando os valores de substituição são nulos
Se o segundo ou terceiro argumento for nulo, você poderá terminar com um resultado nulo.
Exemplo:
SET NULL '(null)';
SELECT
NVL2(1, null, 3) AS "r1",
NVL2(null, 2, null) AS "r2"
FROM DUAL;
Resultado:
r1 r2 _________ _________ (null) (null)
Em relação à primeira linha
SET NULL '(null)';
, adicionei esta linha para que minha sessão SQLcl retorne esse valor sempre que o resultado for nulo. Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que
null
ocorre como resultado de um SQL SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada (como eu fiz aqui). Contagem de argumentos inválida
Chamar a função sem passar nenhum argumento resulta em um erro:
SELECT NVL2()
FROM DUAL;
Resultado:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
E passar muitos argumentos também causa um erro:
SELECT NVL2(1, 2, 3, 4)
FROM DUAL;
Resultado:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"