为什么SQLPLUS将空和空CLOB显示为null?

DaB*_*zUK 4 sql oracle null sqlplus clob

似乎SQLPLUS以一种我没想到的方式显示了CLOB的空值和空字符串.

在SQLPLUS中尝试以下内容(我使用的是Oracle 10g服务器).创建一个包含CLOB的表,并插入null,空clob,以及我认为的空字符串:

create table tableA (field1 number, field2 clob);
insert into tableA values (1, null);
insert into tableA values (2, empty_clob());
insert into tableA values (3, '');
Run Code Online (Sandbox Code Playgroud)

好吧,让我们做一些查询,但首先我们需要告诉SQLPLUS为我们清楚地显示空值:

set null {NULL}
Run Code Online (Sandbox Code Playgroud)

对于以下查询,我原本只期望返回第1行,但它返回2:

select * from tableA where field2 is null;

field1   field 2
-----------------------
1        {NULL} 
3        {NULL} 
Run Code Online (Sandbox Code Playgroud)

嗯,所以''在CLOB中存储为null?

好的,基于该结果,我现在希望以下查询返回所有3行,但仅显示{NULL}在行1和3中.但是我得到了这个结果:

select * from tableA;

field1   field 2
-----------------------
1        {NULL} 
2        {NULL} 
3        {NULL} 
Run Code Online (Sandbox Code Playgroud)

这令人困惑.我以为只有2个空值,即使我最初预期为1.那么这里发生了什么?是否set null为CLOB的不行,如果是的话我应该怎么用呢?

我实际上试图用空的CLOB值来解决一个不同的问题,但是这种令人困惑的行为让我运行了一段时间的响铃,所以我想在继续之前理解这一点.

提前致谢

博兹

Qua*_*noi 8

Oracle不区分NULL和空字符串.这是一个众所周知的违规或SQL标准.

这是默认字符串类型的原因VARCHAR2与否VARCHAR.

在所有当前发布的版本中,它们是相同的,但VARCHAR不建议使用.这是因为VARCHAR应该区分NULL和空字符串,而VARCHAR2标准中没有描述,而不是.