Nulls
If a column in a row has no value, then the column is said to be null, or to contain null. Nulls can appear in columns of any datatype that are not restricted by NOT
NULL
or PRIMARY
KEY
integrity constraints. Use a null when the actual value is not known or when a value would not be meaningful.
Oracle Database treats a character value with a length of zero as null. However, do not use null to represent a numeric value of zero, because they are not equivalent.
Note:
Oracle Database currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls.Any arithmetic expression containing a null always evaluates to null. For example, null added to 10 is null. In fact, all operators (except concatenation) return null when given a null operand.
Nulls in SQL Functions
Most scalar functions return null when given a null argument. You can use the NVL
function to return a value when a null occurs. For example, the expression NVL(commission_pct,0)
returns 0 if commission_pct
is null or the value of commission_pct
if it is not null.
For information on how aggregate functions handle nulls, see "Aggregate Functions".
Nulls with Comparison Conditions
To test for nulls, use only the comparison conditions IS
NULL
and IS
NOT
NULL
. If you use any other condition with nulls and the result depends on the value of the null, then the result is UNKNOWN
. Because null represents a lack of data, a null cannot be equal or unequal to any value or to another null. However, Oracle considers two nulls to be equal when evaluating a DECODE
function. Refer to DECODE for syntax and additional information.
Oracle also considers two nulls to be equal if they appear in compound keys. That is, Oracle considers identical two compound keys containing nulls if all the non-null components of the keys are equal.
Nulls in Conditions
A condition that evaluates to UNKNOWN
acts almost like FALSE
. For example, a SELECT
statement with a condition in the WHERE
clause that evaluates to UNKNOWN
returns no rows. However, a condition evaluating to UNKNOWN
differs from FALSE
in that further operations on an UNKNOWN
condition evaluation will evaluate to UNKNOWN
. Thus, NOT
FALSE
evaluates to TRUE
, but NOT
UNKNOWN
evaluates to UNKNOWN
.
Table 2-20 shows examples of various evaluations involving nulls in conditions. If the conditions evaluating to UNKNOWN
were used in a WHERE
clause of a SELECT
statement, then no rows would be returned for that query.
Table 2-20 Conditions Containing Nulls
Condition | Value of A | Evaluation |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NVL
Syntax
Description of the illustration nvl.gif
Purpose
NVL
lets you replace null (returned as a blank) with a string in the results of a query. If expr1
is null, then NVL
returns expr2
. If expr1
is not null, then NVL
returns expr1
.
The arguments expr1
and expr2
can have any datatype. If their datatypes are different, then Oracle Database implicitly converts one to the other. If they are cannot be converted implicitly, the database returns an error. The implicit conversion is implemented as follows:
-
If
expr1
is character data, then Oracle Database convertsexpr2
to the datatype ofexpr1
before comparing them and returnsVARCHAR2
in the character set ofexpr1
. -
If
expr1
is numeric, then Oracle determines which argument has the highest numeric precedence, implicitly converts the other argument to that datatype, and returns that datatype.See Also:
Table 2-10, "Implicit Type Conversion Matrix" for more information on implicit conversion and "Numeric Precedence" for information on numeric precedence
Examples
The following example returns a list of employee names and commissions, substituting "Not Applicable" if the employee receives no commission:
SELECT last_name, NVL(TO_CHAR(commission_pct), 'Not Applicable') "COMMISSION" FROM employees WHERE last_name LIKE 'B%' ORDER BY last_name; LAST_NAME COMMISSION ------------------------- ---------------------------------------- Baer Not Applicable Baida Not Applicable Banda .1 Bates .15 Bell Not Applicable Bernstein .25 Bissot Not Applicable Bloom .2 Bull Not ApplicableNVL2
Syntax
Description of the illustration nvl2.gifPurpose
NVL2
lets you determine the value returned by a query based on whether a specified expression is null or not null. Ifexpr1
is not null, thenNVL2
returnsexpr2
. Ifexpr1
is null, thenNVL2
returnsexpr3
.The argument
expr1
can have any datatype. The argumentsexpr2
andexpr3
can have any datatypes exceptLONG
.If the datatypes of
expr2
andexpr3
are different:
If
expr2
is character data, then Oracle Database convertsexpr3
to the datatype ofexpr2
before comparing them unlessexpr3
is a null constant. In that case, a datatype conversion is not necessary. Oracle returnsVARCHAR2
in the character set ofexpr2
.If
expr2
is numeric, then Oracle determines which argument has the highest numeric precedence, implicitly converts the other argument to that datatype, and returns that datatype.See Also:
Table 2-10, "Implicit Type Conversion Matrix" for more information on implicit conversion and "Numeric Precedence" for information on numeric precedenceExamples
The following example shows whether the income of some employees is made up of salary plus commission, or just salary, depending on whether the
commission_pct
column ofemployees
is null or not.
SELECT last_name, salary, NVL2(commission_pct, salary + (salary * commission_pct), salary) income FROM employees WHERE last_name like 'B%' ORDER BY last_name; LAST_NAME SALARY INCOME ------------------------- ---------- ---------- Baer 10000 10000 Baida 2900 2900 Banda 6200 6882 Bates 7300 8468 Bell 4000 4000 Bernstein 9500 11970 Bissot 3300 3300 Bloom 10000 12100 Bull 4100 4100
댓글 없음:
댓글 쓰기