在Oracle中有个关键字叫NULL,它表示某个值是未知的、是不确定的。既然是未知的,就有无数种的可能性。因此,NULL并不是一个确定的值。
例1
set serverout on declare v_b1 boolean:=null; --布尔值可以赋值null.当然它另外两种值只能是true,false了 v_a int := null; v_b int := null; --整数可以给它赋值null v_s varchar2(20):= null ; --字符也可以赋值null begin if(v_a= v_b) then --v_a 和v_b都是null但此处判断的结果是它们并不相等.改成v_a =null结果仍然是一样 dbms_output.put_line('v_a equal v_b'); else dbms_output.put_line('v_a not equal v_b');--输出这个结果 end if; if(v_b1) then --把v_b1改成not v_b1结果都一样.也就是v_b1和把它取反都不会是true dbms_output.put_line('v_b1 equal true'); else dbms_output.put_line('v_b1 is not true');--输出这个结果 end if; if(true or v_b1) then --输出v_b1 equal true dbms_output.put_line('v_b1 equal true'); else dbms_output.put_line('v_b1 is not true'); -- 如果把前面的判断条件改成true and v_b1 则输入这条语句 end if; end;
例2:
create table test (ename char(1),constraint ck_test check(ename in ('a',null)));
--上面的语句创建一个表,只有一列ename,给此列添加约束条件,它的值只能在列表('a',null)中.但实际上我们可以插入任何字符.这时貌似null可以代表所有的字符了.去掉它只能插入'a'
eate table test1 (ename char(1),constraint ck_test check(ename not in ('a',null)));
--按我们猜想如果null能代表所有字符了那它取反就是不能输入任何字符.但实际上不是.此处它貌似没起任何作用.去掉它和不去掉效果一样.都可以插入除'a'外的任何字符
1.怎么理解null的这些用法
既然null是个不确定的类型,那么:
如例1中两个整数值v_a,v_b都是null.要让他们相等得就类似于让两个不确定类型,不确定数值的两个变量去比较,所以不可能相等。
而true or v_b1之所以为真,是因为or前面的为真的话,不去对后面的v_b1做判断了.
而v_b1和not v_b1都为假则可以认为v_b1的值不确定,所以最终结果只能为false.
这样来理解了null就不难明白为什么我们在一个表中插入一个null值.但我们不能通过判断条件=null来查询.不过oracle提供了关键字is来判断一个值是否是null.
例2中第二种情况我们也可以理解为既然null是不确定的,那么其实in或者not in都无所谓,都可以输入任何字符。
null 与任何值做逻辑运算得结果都为 false,包括和null本身
null 和任何数值进行数学运算,结果都为 null
null和字符串做连接等操作时,会作为空串使用,可以使用 || 将空字符串或 null 和字符串连接,或者concat('a', null)。
2.null和空字符串
oracle 将空字符串即''当成null.
所以如果你插入一条记录为空,oracle默认会转化为null值。
3.null和空字符串的判断
null 与任何值做逻辑运算得结果都为 false,所以要判断NULL就的用 is null 关键字来判断。
4.null和空字符串的转化
NVL( string1, replace_with)
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值。
引申一下,此NVL的作用与SQLserver 中的 ISNULL( string1, replace_with) 一样。
注意事项:string1和replace_with必须为同一数据类型,除非显示的使用TO_CHAR函数。
4.使用null的注意事项
在用avg,max,min等oracle内置函数时会把为NULL的列忽略掉。
相关推荐
Sybase 中同样不存在长度为 0 的字符串,但是与 Oracle 不同的是,Sybase 并不将空串视作 NULL,而是视作与只包含一个空格的字符串等价。 Oracle 中 null 的长度是一些文章上说 null 长度为零(×),其实长度也为...
5. 空与空串:MySQL 中空与空串是两个不同的东西,而在 Oracle 中将 null 与空串做了同样的处理。 6. rs.isLast():当数据库为 MySQL 时,可以使用 `Connection.prepareStatement(str1)`,而在 Oracle 中必须使用 `...
`VARCHAR2` 还有一个特性,即把空串视为`NULL` 处理,而`VARCHAR` 仍然将其当作空串处理。因此,在大多数情况下,建议使用`VARCHAR2` 来提高兼容性和效率。 **Nchar/Nvarchar2** `NCHAR` 和`NVARCHAR2` 是Unicode...
PolarDB-O 支持 Oracle 数据库的多种语法,包括 PL/SQL、Package、VPD、系统视图和系统包、DBLINK、NULL 和空串兼容等,能够满足多种应用场景的需求。 函数兼容 PolarDB-O 支持 Oracle 数据库的多种函数,包括 ...
1. 数据库的概念模型独立于具体的机器和DBMS,这意味着概念模型设计阶段不需要考虑实际使用的数据库管理系统,如MySQL、Oracle等。 2. Session对象在Web开发中用于跟踪用户状态,其默认有效期通常为20分钟。 3. 主...