SQL em Oracle > DML > SELECT > Tratamento de valores nulos
Tratamento de valores nulos tl_logo2.jpg

Existe alguma polémica sobre a utilização de valores nulos nos campos de uma base de dados. Uma corrente de opinião é favoravel à sua utilização enquanto outra não o é. Um valor nulo significa:

A utilização de nulos cria os seguintes problemas:

O query abaixo pretende determinar o salário anual de cada empregado:

select ename, sal*14+comm "Salário Anual", job
from emp;
ENAME      Salário Anual JOB
---------- ------------- ---------
SMITH                    CLERK
ALLEN              22700 SALESMAN
WARD               18000 SALESMAN
JONES                    MANAGER
MARTIN             18900 SALESMAN
BLAKE                    MANAGER
CLARK                    MANAGER
SCOTT                    ANALYST
KING                     PRESIDENT
TURNER             21000 SALESMAN
ADAMS                    CLERK
JAMES                    CLERK
FORD                     ANALYST
MILLER                   CLERK

14 rows selected.

Os empregados que não são vendedores têm valor nulo na comissão e por isso o resultado da expressão é nulo. Para obter um resultado é necessário converter os nulos em zero. Para isso podemos usar a função NVL().

NVL tem dois argumentos:

Ex1: NVL(datecolumn,'01-Jan-97') => se datecolumn for nulo substitui por '01-Jan-1997'.

Ex2: NVL(UnidadesEmStock,0) => se UnidadesEmStock for nulo substitui por '0'.

O calculo do salário anual incluindo as comissões pode ser feito desta forma:

select ename, sal*14+NVL(comm,0) "Salário Anual", job
from emp;
ENAME      Salário Anual JOB
---------- ------------- ---------
SMITH              11200 CLERK
ALLEN              22700 SALESMAN
WARD               18000 SALESMAN
JONES              41650 MANAGER
MARTIN             18900 SALESMAN
BLAKE              39900 MANAGER
CLARK              34300 MANAGER
SCOTT              42000 ANALYST
KING               70000 PRESIDENT
TURNER             21000 SALESMAN
ADAMS              15400 CLERK
JAMES              13300 CLERK
FORD               42000 ANALYST
MILLER             18200 CLERK

14 rows selected.

bthome.gifTopo


Realizado por Turtle Learning ®. Última alteração em 2011-02-26