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值来解决一个不同的问题,但是这种令人困惑的行为让我运行了一段时间的响铃,所以我想在继续之前理解这一点.
提前致谢
博兹
Oracle不区分NULL和空字符串.这是一个众所周知的违规或SQL标准.
这是默认字符串类型的原因VARCHAR2与否VARCHAR.
在所有当前发布的版本中,它们是相同的,但VARCHAR不建议使用.这是因为VARCHAR应该区分NULL和空字符串,而VARCHAR2标准中没有描述,而不是.