http://www.adp-gmbh.ch/ora/misc/null.html
NULL in Oracle
|
|
|
A column in a table can be defined with the not null
constraint.
nvl
, nvl2
and lnnvl
are SQL constructs that are related to NULL handling.
Empty string
Oracle treats the empty string ('') as null. This is not
ansi compliant. Consequently, the length
of an emtpy string is null
, not 0.
Null means unknown value
The valuenull
can be regarded as an unknown value. Therefore, the following select statement returns null:
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 as sum()
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的比较而犯愁呢?
在Oracle数据库中,NULL值是一种特殊的值,表示未知或不存在的数据。它不同于任何其他值,包括空字符串('')和零。理解Oracle如何处理NULL值是数据库管理与查询中的重要一环,尤其对于数据完整性、查询逻辑以及函数...
Oracle 中 null 的长度是一些文章上说 null 长度为零(×),其实长度也为 null。Oracle 不存在长度为 0 的字符串。 函数内若有参数为空此时返回为空,但某些除外。函数解析原理,对于度量函数,如果给定的参数为...
### Oracle中的NULL知识点详解 #### 一、NULL基础概念与特性 在Oracle数据库中,`NULL`是一个特殊值,表示未知或未定义的状态。它既不是数字也不是字符,因此不能与其他任何类型的值进行比较。在SQL操作中,NULL的...
Oracle SQL 中判断值为空或 Null 的方法有多种,在本文中,我们将介绍 Oracle 和 SQL Server 中的空值判断方法。 Oracle 中的空值判断 在 Oracle 中,可以使用 `NVL` 函数来判断值为空或 Null。`NVL` 函数的语法...
在Oracle数据库中,NULL是一个特殊的数据类型,用于表示未知或者未赋值的情况。Oracle对NULL的定义是,当一条记录的列没有值,即该列的值是未知或不确定的,我们就称它为NULL。这个概念在数据库操作中非常关键,因为...
-- 先对数据库中user_name进行去空格,然后再比较ps.setString(1,"sgl");ResultSet rs = ps.executeQuery(); 在mybatis框架中,也需要注意char类型字段的特殊性。在Mapper文件中,查询sql语句需要使用trim()函数来...
Oracle是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。Oracle数据库提供了丰富的功能,包括数据存储、查询、事务处理、安全性等。在本文中,我们将深入探讨Oracle的使用,特别是通过...
null and not null
在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零
"Oracle提权工具"是指那些可以帮助攻击者或者安全研究人员在Oracle环境中提升权限的工具,通常用于测试数据库的安全性。OracleShell是一个典型的例子,它是Java编写的,包含在名为`oracleShell.jar`的压缩包文件中。...
### Oracle中的SUBSTR函数详解 在Oracle数据库中,`SUBSTR`函数是一个非常重要的字符串处理函数,用于从指定的字符串中提取子串。该函数在实际应用中极为广泛,能够帮助用户灵活地处理数据,满足各种业务需求。下面...
即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。 任何在where子句中使用is null或is not null的语句优化器是不...
Oracle数据库中的BLOB(Binary Large Object)字段是用来存储大量二进制数据的,例如图片、文档或音频文件。在Delphi编程环境中,处理这类数据时需要掌握特定的API调用和方法。本篇文章将深入探讨如何在Delphi中对...
Oracle官方SQL参考手册、oracle函数大全、Ora9iSQL参考手册、oracle函数大全(分类显示)、Oracle函数大全、Oracle函数手册、ORACLE九阴真经、oracle知识库、SQLCodes-Oracle错误代码与消息解释、SQL语言参考大全,10...
在Visual Studio中,可以通过右键点击解决方案资源管理器中的项目,选择“管理NuGet程序包”,然后在搜索框中输入"Oracle.ManagedDataAccess",找到对应的包并安装。 接下来,我们需要编写代码来建立数据库连接。...
C# oracle 类 事务处理 #region 公有方法 public void JoinTransaction(Transaction transaction) { if (this._transaction != null) { throw new Exception("对象已经在另一个事务中"); } else { this._...
Oracle 数据库 11g 中的分区.pdf Oracle 数据库 11g:可管理性概述.pdf Oracle 数据库 11g:新特性概述.pdf Oracle 真正应用集群 11g .pdf Oracle高级压缩.pdf Oracle性能优化包 11g .pdf Oracle真正应用测试...
在Oracle数据库系统中,外连接(Outer Join)是一种高级的SQL联接操作,它扩展了标准的内连接(Inner Join)概念,允许我们查询不匹配的数据。外连接分为三种类型:左外连接(Left Outer Join)、右外连接(Right ...
在实际工作中,我们经常需要将 dmp 文件导入到 Oracle 数据库中。下面我们将详细介绍如何在 Linux 下向 Oracle 数据库中导入 dmp 文件。 首先,我们需要登录 Linux 系统,以 oracle 用户登录。如果我们以 root 用户...