`
iihero
  • 浏览: 258244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle中的Null(再提)

阅读更多

http://www.adp-gmbh.ch/ora/misc/null.html

 

NULL in Oracle

A column in a table can be defined with thenot null constraint.
nvl ,nvl2 andlnnvl are SQL constructs that are related to NULL handling.
Theset null command inSQL*Plus defines how nulls are displayed in a resultset.

Empty string

Oracle treats the empty string ('') as null. This isnot ansi compliant. Consequently, thelength of an emtpy string isnull , not 0.

Null means unknown value

The valuenull can be regarded as an unknown value. Therefore, the following select statement returns null:
select
 5+7+null+9 from dual
;
This is because five plus seven plus an unknown value plus nine is of course unknown as well, hence Oracle returns null. However, aggregate functions such assum() disregard nulls and return the sum of all non-null values.

Truth table

In the following, I create a truth table for booleans and the operatorsand andor . I create a table to insert booleans.
create table booleans (
  bool varchar2(5)
);
Because I cannot store booleans directly in a table, I use varchar2 as the column type and insert the english names for the booleans:
insert into booleans values ('true');
insert into booleans values ('false');
insert into booleans values ('null');
Then, I compare every boolean to every other and print the truth table:
declare 
  bool_1   boolean;
  bool_2   boolean;

  bool_and boolean;
  bool_or  boolean;

  res_and  varchar2(5);
  res_or   varchar2(5);

  function string_to_bool(str in varchar2) return boolean is begin
    return case when str = 'true'  then true
                when str = 'false' then false
                when str = 'null'  then null end;
    end;

  function bool_to_str(bool in boolean) return varchar2 is begin
    return case when bool =  true   then 'true'
                when bool =  false  then 'false'
                when bool is null   then 'null' end;
    end;

begin

  dbms_output.put_line('bool1  bool2|   and     or');
  dbms_output.put_line('------------+-------------');

  for b1 in (select bool from booleans) loop
  for b2 in (select bool from booleans) loop

    bool_1 := string_to_bool(b1.bool);
    bool_2 := string_to_bool(b2.bool);

    bool_and := bool_1 AND bool_2;
    bool_or  := bool_1 OR  bool_2;

    res_and  := bool_to_str(bool_and);
    res_or   := bool_to_str(bool_or );

    dbms_output.put_line(lpad(b1.bool, 5) || '  ' ||
                         lpad(b2.bool, 5) || '| ' ||
                         lpad(res_and, 5) || '  ' ||
                         lpad(res_or , 5));
  
  end loop; end loop;
end;
/
bool1  bool2|   and     or
------------+-------------
 true   true|  true   true
 true  false| false   true
 true   null|  null   true
false   true| false   true
false  false| false  false
false   null| false   null
 null   true|  null   true
 null  false| false   null
 null   null|  null   null
As can be seen, for example,falseand null is false. This makes sense because null, being an unknown value, could in this this context either be true or false. Bothfalse and true andfalse and false are false, hencefalse and null is certainly false as well. On the other hand,falseor null is null because the result is true forfalse or true and false forfalse or false , hence the expression's value is unknown, or null.
分享到:
评论

相关推荐

    Oracle NULL值的比较函数(是NULL=NULL为真的函数)

    你是否也为在Oracle里如何实现NULL的比较而犯愁呢?

    oracle中对null值的处理

    在Oracle数据库中,NULL值是一种特殊的值,表示未知或不存在的数据。它不同于任何其他值,包括空字符串('')和零。理解Oracle如何处理NULL值是数据库管理与查询中的重要一环,尤其对于数据完整性、查询逻辑以及函数...

    Oracle null的使用

    Oracle 中 null 的长度是一些文章上说 null 长度为零(×),其实长度也为 null。Oracle 不存在长度为 0 的字符串。 函数内若有参数为空此时返回为空,但某些除外。函数解析原理,对于度量函数,如果给定的参数为...

    oracle中的null_考试题目

    ### Oracle中的NULL知识点详解 #### 一、NULL基础概念与特性 在Oracle数据库中,`NULL`是一个特殊值,表示未知或未定义的状态。它既不是数字也不是字符,因此不能与其他任何类型的值进行比较。在SQL操作中,NULL的...

    oraclesql判断值为空-Oracle-sqlserver的空值(null)判断.pdf

    Oracle SQL 中判断值为空或 Null 的方法有多种,在本文中,我们将介绍 Oracle 和 SQL Server 中的空值判断方法。 Oracle 中的空值判断 在 Oracle 中,可以使用 `NVL` 函数来判断值为空或 Null。`NVL` 函数的语法...

    关于Oracle中NULL使用的若干实验研究.pdf

    在Oracle数据库中,NULL是一个特殊的数据类型,用于表示未知或者未赋值的情况。Oracle对NULL的定义是,当一条记录的列没有值,即该列的值是未知或不确定的,我们就称它为NULL。这个概念在数据库操作中非常关键,因为...

    解决mybatis使用char类型字段查询oracle数据库时结果返回null问题

    -- 先对数据库中user_name进行去空格,然后再比较ps.setString(1,"sgl");ResultSet rs = ps.executeQuery(); 在mybatis框架中,也需要注意char类型字段的特殊性。在Mapper文件中,查询sql语句需要使用trim()函数来...

    最全的Oracle中文使用手册

    Oracle是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。Oracle数据库提供了丰富的功能,包括数据存储、查询、事务处理、安全性等。在本文中,我们将深入探讨Oracle的使用,特别是通过...

    null and not null

    null and not null

    oracle null使用详解

    在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零

    oracle提权工具-oracleShell.zip

    "Oracle提权工具"是指那些可以帮助攻击者或者安全研究人员在Oracle环境中提升权限的工具,通常用于测试数据库的安全性。OracleShell是一个典型的例子,它是Java编写的,包含在名为`oracleShell.jar`的压缩包文件中。...

    oracle中 substring函数的使用

    ### Oracle中的SUBSTR函数详解 在Oracle数据库中,`SUBSTR`函数是一个非常重要的字符串处理函数,用于从指定的字符串中提取子串。该函数在实际应用中极为广泛,能够帮助用户灵活地处理数据,满足各种业务需求。下面...

    有关于oracle数据库的sql优化

    即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。  任何在where子句中使用is null或is not null的语句优化器是不...

    oracle blob 字段 读写 delphi

    Oracle数据库中的BLOB(Binary Large Object)字段是用来存储大量二进制数据的,例如图片、文档或音频文件。在Delphi编程环境中,处理这类数据时需要掌握特定的API调用和方法。本篇文章将深入探讨如何在Delphi中对...

    oracle中文手册合集(CHM)

    Oracle官方SQL参考手册、oracle函数大全、Ora9iSQL参考手册、oracle函数大全(分类显示)、Oracle函数大全、Oracle函数手册、ORACLE九阴真经、oracle知识库、SQLCodes-Oracle错误代码与消息解释、SQL语言参考大全,10...

    基于C#连接Oracle数据库Oracle.ManagedDataAccess

    在Visual Studio中,可以通过右键点击解决方案资源管理器中的项目,选择“管理NuGet程序包”,然后在搜索框中输入"Oracle.ManagedDataAccess",找到对应的包并安装。 接下来,我们需要编写代码来建立数据库连接。...

    C# oracle通用类

    C# oracle 类 事务处理 #region 公有方法 public void JoinTransaction(Transaction transaction) { if (this._transaction != null) { throw new Exception("对象已经在另一个事务中"); } else { this._...

    oracle11g官方中文文档完整版

    Oracle 数据库 11g 中的分区.pdf Oracle 数据库 11g:可管理性概述.pdf Oracle 数据库 11g:新特性概述.pdf Oracle 真正应用集群 11g .pdf Oracle高级压缩.pdf Oracle性能优化包 11g .pdf Oracle真正应用测试...

    理解oracle中的外连接

    在Oracle数据库系统中,外连接(Outer Join)是一种高级的SQL联接操作,它扩展了标准的内连接(Inner Join)概念,允许我们查询不匹配的数据。外连接分为三种类型:左外连接(Left Outer Join)、右外连接(Right ...

    linux下向oracle中导入dmp文件

    在实际工作中,我们经常需要将 dmp 文件导入到 Oracle 数据库中。下面我们将详细介绍如何在 Linux 下向 Oracle 数据库中导入 dmp 文件。 首先,我们需要登录 Linux 系统,以 oracle 用户登录。如果我们以 root 用户...

Global site tag (gtag.js) - Google Analytics