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"