Olá Amigos...
Neste
post eu vou falar sobre a função NVL() e NVL2()..
NVL é um função de 2
parâmetros que tem por objetivo testar o primeiro parâmetro, se o
mesmo for nulo, então retornará o valor do segundo parâmetro caso
contrário retorna o valor do primeiro parâmetro.
Exemplificando, se
informarmos um campo de um determinado tipo no primeiro parametro do
NVL e no segundo informar ZERO, então ao rodar o SQL o valor do
primeiro campo for NULO o valor retornado será ZERO.
select
NVL(codigo_cliente, 0) as campo from dual;
retorno
campo
-------|
0 |
O NVL2 já nos ajuda um
pouco mais por se tratar de um operador "TERNÁRIO" ( não
é terneiro tá, é ternário!!!!).
Sua sintaxe é a
seguinte:
NVL2(teste, true,
false)..
como a primeira função
NVL que retorna o valor do segundo parâmetro se o primeiro parâmetro
for NULO, o NVL2 retorna o segundo parâmetro se o primeiro não for
nulo, ou o valor do terceiro parâmetro se for nulo.
Exemplificando:
select
NVL2(codigo_cliente, 1 , 0) from dual;
se codigo_cliente for
nulo, então o retorno será 0 caso contrário 1.
isto também pode ser
aplicado como teste de filtro depois da clausula WHERE ao inves de
testar se o campo é nulo com IS NULL ou IS NOT NULL pode se usar o
NVL ou NVL2
Neste SQL eu quero
somente os registros onde o código do cliente forem nulos (ONDE OS
NULOS SERÃO ZERO... HE HE HE).
SELECT * FROM clientes
WHERE
NVL(codigo_cliente,0) == 0;
Claro que você poderia
também usar :
SELECT * FROM clientes
WHERE codigo_cliente
IS NULL;
OU
SELECT * FROM clientes
WHERE
COALESCE(codigo_cliente, 0) == 0 ;
Mas a minha intensão
neste post é apresentá-los esta funcionalidade ORACLE.
Abraço a todos.