Oracle直接加载似乎会产生奇怪的结果

时间:2010-10-26 11:56:40

标签: oracle oracle10g

我在Oracle 10g数据库中得到了非常奇怪的结果,因为我用压缩表将我的加载器从direct = false切换到direct = true。

例如,当我在加载器之后进行类似的查询时:

从mytable中选择*,其中月份为空

我得不到答案..

但是当我查询特定的行时 select * from mytable where id = 123 出现的行有一个“月”列(vharchar2(10)),它是空的!! 我从未见过......

它只发生在200000+行表中的几行......

你看到会发生什么吗?

我已经切换回direct = false并且运行正常..没有更奇怪的行为.. 我能做什么 ?测试?

由于

3 个答案:

答案 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