oracle中判断空字符串,null与Oracle中的空字符串[重复]

可能重复:为什么Oracle 9i将空字符串视为NULL?

我在Oracle 10g中有一个名为 TEMP_TABLE 的表,只有两列 - id 和 description 只是为了演示 .

列 id 是序列生成的类型为 NUMBER(35, 0) not null 的主键,列 DESCRIPTION 是 VARCHAR2(4000) not null 的类型 .

在这种情况下,基本的表结构如下所示 .

+--------------+-----------+---------------+

|Name | Null? | Type |

+--------------+-----------+---------------+

|ID | NOT NULL | NUMBER(35) |

|DESCRIPTION | NOT NULL | VARCHAR2(4000)|

+--------------+-----------+---------------+

创建此表后,我正在尝试交替插入以下 INSERT 命令 .

INSERT INTO temp_table (id, description) VALUES (1, null); ->unsuccessful

INSERT INTO temp_table (id, description) VALUES (2, ''); ->unsuccessful

它们都不成功,因为在 DESCRIPTION 列上强制执行 not null 约束 .

在这两种情况下,Oracle都抱怨道

ORA-01400: cannot insert NULL into ("WAGAFASHIONDB"."TEMP_TABLE"."DESCRIPTION")

An empty string is treated as a NULL value in Oracle.

如果我在 DESCRIPTION 列上删除 not null 约束,那么基本表结构将如下所示

+--------------+-----------+---------------+

|Name | Null? | Type |

+--------------+-----------+---------------+

|ID | NOT NULL | NUMBER(35) |

|DESCRIPTION | | VARCHAR2(4000)|

+--------------+-----------+---------------+

并且指定的两个 INSERT 命令都将成功 . 他们会创建两行一个 null 值,另一行在 TEMP_TABLE 的 DESCRIPTION 列中创建一个空字符串 '' .

现在,如果我发出以下 SELECT 命令,

SELECT * FROM temp_table WHERE description IS NULL;

然后它获取其中一个具有 null 值而另一个在 DESCRIPTION 列中具有空字符串 '' 的行 .

但是,以下 SELECT 语句不会从 TEMP_TABLE 检索到任何行

SELECT * FROM temp_table WHERE description='';

它甚至不检索 DESCRIPTION 列中具有空字符串的行 .

据推测,似乎Oracle在此处理 null 值和空字符串 '' ,但是在 INSERT 语句中似乎不会出现这种情况,其中 null 值和空字符串 '' 都被阻止插入列中带有 not null 约束 . 为什么会这样?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值