我在Oracle 10g数据库中得到了非常奇怪的结果,因为我用压缩表将我的加载器从direct = false切换到direct = true。
例如,当我在加载器之后进行类似的查询时:
从mytable中选择*,其中月份为空
我得不到答案..
但是当我查询特定的行时 select * from mytable where id = 123 出现的行有一个“月”列(vharchar2(10)),它是空的!! 我从未见过......
它只发生在200000+行表中的几行......
你看到会发生什么吗?
我已经切换回direct = false并且运行正常..没有更奇怪的行为.. 我能做什么 ?测试?
由于
答案 0 :(得分:3)
也许您的列不是null但包含不可打印的字符。你可以在列上进行转储,即:
SQL> select rownum, dump(a) from test;
ROWNUM DUMP(A)
---------- ---------------------------------
1 NULL
2 Typ=1 Len=1: 0
这里第一行有一个NULL值,而第二行有一个非空字符(CHR(0)
)。
您可以在数据库上运行以下查询,以查看您的列是否确实为NULL:
select dump(month) from mytable where id = 123
答案 1 :(得分:2)
对表的任何约束,特别是对该列的NOT NULL约束。约束的状态(延迟,禁用,无效)可能会产生奇怪的现象。
如果约束设置为NOVALIDATE但是受信任,那么优化器可能会看到“啊哈,那列不能为空,所以我甚至不打算看”。
答案 2 :(得分:1)
如果您正在工具(例如toad或sql developer)中查看结果,则该行可能具有未正确显示的空格/控件中断。尝试运行以下查询并显示结果。
select month, nvl(month,'Month is NUll'), length(month)
from mytable
where id = 123