下文出自:
http://www.itpub.net/showthread.php?s=a74b536c2765540c0d5d934983464ed2&threadid=12262我们都知道,在ORACLE中,NULL表示无值或空值。在这里,我把自己对NULL的一点体会写出来,与大家交流。
1。有两种NULL。第一种NULL,是做为值来赋给其它变量的。如:A :=NULL。此时,NULL与 ''(两个连续的单引号)等价。第二种NULL,是做为关系操作符用的。如: IS NULL 和 IS NOT NULL。在这两个关系操作符中,NULL是不能用 '' 代替的。
2。第一种NULL可以与等号连用。如 UPDATE 表名 SET 字段1=NULL WHERE ……;
另外,在赋值时一定要注意,不要在NULL两边加上单引号,若这样写:
V_A :='NULL';
则 V_A 就是一个4个字符的字符串了。
3。对于一个变量的值做判断时,如果变量为空值,则除了 IS NULL 和 IS NOT NULL 两种判断外,其它判断(如 =,>,<等)的结果都是假。但有一种情况,可以包含进来。比如,当变量V_A的值为'A'时,做 语句1,否则做 语句2。这样就可以写为:
IF V_A = 'A' THEN 语句1;
ELSE 语句2;
END IF;
这时,V_A 为空时,也会执行 语句2。但反过来写就是错的,如:
IF V_A != 'A' THEN 语句2;
ELSE 语句1;
END IF;
这时,V_A 为空时,还会执行 语句1。
4。在计算一个number字段 A 的SUM时,若有的记录此字段为空,则用 SUM(A) 来求和时,会忽略这样的记录。
在计算一个number字段 A 的COUNT时,若有的记录此字段为空,则用 COUNT(A) 来计数时,不会忽略这样的记录,也会把这样的记录统计进来。
5。在用 LIKE '%' 来匹配时,空值不会被匹配。因为%表示“任意多个字符”,但不包括“没有任何字符”。
6。对空值的转换,用 nvl函数来完成。NVL(A,'0') 当A为空时返回'0',否则为变量A的值。