oracle中NULL字符的比较

在ORACLE中,将空字符串视为NULL,任何值与NULL比较结果都为NULL。如此一来,在比较两个字符串的时候就会出现意外。请看以下的例子:

DECLARE

i VARCHAR2(10) := NULL;

v VARCHAR2(10) := ‘ABC‘;

BEGIN

IF(i = v) THEN

DBMS_OUTPUT.PUT_LINE(‘相等‘);

ELSE

DBMS_OUTPUT.PUT_LINE(‘不等‘);

END IF;

END;

请你用你聪明的头脑判断一下,结果应该是什么?很容易就可以得出结果:‘不等‘。很好,你是对的。在SQLPLUS上运行的结果和你想的一样。那么我改一下程序,你再判断一下:

DECLARE

i VARCHAR2(10) := NULL;

v VARCHAR2(10) := ‘ABC‘;

BEGIN

IF(i <> v) THEN

DBMS_OUTPUT.PUT_LINE(‘不等‘);

ELSE

DBMS_OUTPUT.PUT_LINE(‘相等‘);

END IF;

END;

看上去和第一个程序没有太大的差别,很容易就得出结果:‘不等‘。呵呵。你确定结果就是这个吗?那么请你在SQLPLUS测试一下,来验证你是正确的。很可惜,正确的结果应该是:‘相等‘。是不是很诧异?正如开始所说的:任何值与NULL比较结果都为NULL。即在第一个程序中的i=v比较的结果应该是NULL,而第二个程序中的i<>v比较的结果也是NULL。当IF结构中的条件为NULL时,将跳过当前的分支进入到ELSE或者是结束。不行吗?那你运行一下以下的程序将可以等到验证:

BEGIN

IF(NULL) THEN

DBMS_OUTPUT.PUT_LINE(‘NOT NULL‘);

ELSE

DBMS_OUTPUT.PUT_LINE(‘NULL‘);

END IF;

END;

结果输出的是:‘NULL‘。

时间: 2024-10-13 04:59:24

oracle中NULL字符的比较的相关文章

Sql与oracle中null值的区别

原贴链接请点击: 1 null值的介绍 NULL 是数据库中特有的数据类型,当一条记录的某个列为 NULL ,则表示这个列的值是未知的.是不确定的.既然是未知的,就有无数种的可能性.因此, NULL 并不是一个确定的值. 这是 NULL 的由来.也是 NULL 的基础,所有和 NULL 相关的操作的结果都可以从 NULL 的概念推导出来. 2 oracle中的null值介绍 在不知道具体有什么数据的时候,即未知,可以用NULL, 称它为空,ORACLE中,含有空值的表列长度为零.允许任何一种数据

细说Oracle中NULL值

1.NULL是什么? NULL表示UNKNOW(未知),其不代表不论什么值. 比如一行中某列没有不论什么值即为NULL. ORACLE同意不论什么一种数据类型的字段为空,除了下面两种情况: 1)主键字段(primary key), 2)定义时已经加了NOT NULL限制条件的字段 2.NULL有什么用? 1)NULL可用于条件推断: SELECT * FROM EMP WHERE COMM IS NULL; 或 SELECT * FROM EMP WHERE COMM IS NOT NULL;

通过案例学调优之--Oracle中null使用索引

通过案例学调优之--Oracle中null使用索引  默认情况下,Oracle数据库,null在Index上是不被存储的,当在索引列以"is null"的方式访问时,无法使用索引:本案例,主要向大家演示如何在存在null的索引列上,使用"is null"访问索引. 案例分析: 1.建立表和普通索引 13:52:23 [email protected] prod >create table t2 (x int,y int); Table created. 14:

Oracle中Null与空字符串&#39; &#39;的区别

含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除了以下两种情况: 1.主键字段(primary key), 2.定义时已经加了NOT NULL限制条件的字段 说明: 1.等价于没有任何值.是未知数. 2.NULL与0.空字符串.空格都不同. 3.对空值做加.减.乘.除等运算操作,结果仍为空. 4.NULL的处理使用NVL函数. 5.比较时使用关键

Oracle中的字符函数

Oracle中常用的字符串函数有以下几种: 1.upper()---将字符串的内容全部转换为大写.lower()---将字符串的内容全部转换为小写.具体用法: select  upper('test'),lower('TEST')  from  dual 2.initcap()--将字符串的首字母变成大写.具体用法: select  enamel,initcap(ename)  from  emp 3.replace()--字符串替换函数.具体用法: select  ename,replace(

oracle 中null

没有给赋值,也没有默认值时为null ORACLE允许任何一种数据类型的字段为空,除了以下两种情况: 1.主键字段(primary key), 2.定义时已经加了NOT NULL限制条件的字段 说明: 1.等价于没有任何值.是未知数(未赋值,且没有默认值). 2.NULL与0.空字符串.空格都不同. 3.对空值做加.减.乘.除等运算操作,结果仍为空. 4.NULL的处理使用NVL函数. 5.比较时使用关键字用"is null"和"is not null". 6.空值

Oracle中B-TREE索引的深入理解(转载)

索引概述 索引与表一样,也属于段(segment)的一种.里面存放了用户的数据,跟表一样需要占用磁盘空间.只不过,在索引里的数据存放形式与表里的数据存放形式非常的不一样.在理解索引时,可以想象一本书,其中书的内容就相当于表里的数据,而书前面的目录就相当于该表的索引.同时,通常情况下,索引所占用的磁盘空间要比表要小的多,其主要作用是为了加快对数据的搜索速度,也可以用来保证数据的唯一性.但是,索引作为一种可选的数据结构,你可以选择为某个表里的创建索引,也可以不创建.这是因为一旦创建了索引,就意味着o

Oracle sql 中的字符(串)替换与转换[转载]

1.REPLACE 语法:REPLACE(char, search_string,replacement_string) 用法:将char中的字符串search_string全部转换为字符串replacement_string.       举例:SQL> select REPLACE('fgsgswsgs', 'fk' ,'j') 返回值 from dual;            返回值            ---------            fgsgswsgs SQL> sele

【总结】Oracle sql 中的字符(串)替换与转换

1.REPLACE 语法:REPLACE(char, search_string,replacement_string) 用法:将char中的字符串search_string全部转换为字符串replacement_string.       举例:SQL> select REPLACE('fgsgswsgs', 'fk' ,'j') 返回值 from dual;            返回值            ---------            fgsgswsgs SQL> sele