gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:11:41 27 4
gpt4 key购买 nike

SQLPLUS 似乎以一种我没有预料到的方式显示 CLOB 的 null 和空字符串。

在 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, '');

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

set null {NULL}

对于以下查询,我预计只返回第 1 行,但它返回 2:

select * from tableA where field2 is null;

field1 field 2
-----------------------
1 {NULL}
3 {NULL}

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

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

select * from tableA;

field1 field 2
-----------------------
1 {NULL}
2 {NULL}
3 {NULL}

这很令人困惑。我认为只有 2 个空值,尽管我最初预计有 1 个空值。那么这里发生了什么? set null 不适用于 CLOB,如果是,我应该使用什么来代替?

我实际上正在尝试使用 null CLOB 值解决另一个问题,但这种令人困惑的行为让我运行了一段时间,所以我想在继续之前了解这一点。

提前致谢

博兹

最佳答案

Oracle 不区分 NULL 和空字符串。这是众所周知的违反 SQL 标准的行为。

这就是默认字符串类型为 VARCHAR2 而不是 VARCHAR 的原因。

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

关于sql - 为什么 SQLPLUS 将空和 null CLOB 显示为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4815518/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com