Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função NVL2() no Oracle


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"