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

Oracle直接加载似乎产生了奇怪的结果,oracle,oracle10g,Oracle,Oracle10g,自从使用压缩表将加载程序从direct=false切换到direct=true以来,我在Oracle 10g数据库中得到了非常奇怪的结果 例如,当我在加载程序后进行类似的查询时: 从月份为空的mytable中选择* 我没有得到答案 但当我询问某一行时 从id=123的mytable中选择* 显示的行有一个“月”列(vharchar2(10)),该列为空!! 我从来没有看到过 在我的200000多行表格中,只有几行会发生这种情况 你知道会发生什么吗 我已切换回direct=false,它运行正常。

自从使用压缩表将加载程序从direct=false切换到direct=true以来,我在Oracle 10g数据库中得到了非常奇怪的结果

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

从月份为空的mytable中选择*

我没有得到答案

但当我询问某一行时 从id=123的mytable中选择* 显示的行有一个“月”列(vharchar2(10)),该列为空!! 我从来没有看到过

在我的200000多行表格中,只有几行会发生这种情况

你知道会发生什么吗

我已切换回direct=false,它运行正常。。不再有奇怪的行为。。 我能做什么?测试


谢谢

也许您的列不是空的,但包含不可打印的字符。你能在柱子上倒一下吗

SQL> select rownum, dump(a) from test;

    ROWNUM DUMP(A)
---------- ---------------------------------
         1 NULL
         2 Typ=1 Len=1: 0
这里,第一行有一个空值,而第二行有一个非空字符(
CHR(0)

您可以在数据库上运行以下查询,查看列是否真的为空:

select dump(month) from mytable where id = 123

如果您在工具(如toad或sql developer)中查看结果,则该行可能有未正确显示的空格/控制符。尝试运行以下查询并显示结果

select month, nvl(month,'Month is NUll'), length(month) 
     from mytable 
     where id = 123

表上的任何约束,特别是该列上的NOTNULL约束。约束的状态(延迟、禁用、novalidate)可能会产生异常


如果约束设置为NOVALIDATE,但受信任,那么优化器可能会看到“啊哈,该列不能为null,所以我甚至不必费心查找”

你们有每月的指数吗?你试过重建它们吗?什么是查询解释计划?此表上没有索引。。很抱歉,我不得不在没有direct=true的情况下重新加载它,它工作了,但我没有从before中解释查询direct=true是您唯一做的更改吗?根据基础数据中的内容,可能一次运行会修剪月列,另一次运行会留下空格。