Oracle直接加载似乎产生了奇怪的结果
自从使用压缩表将加载程序从direct=false切换到direct=true以来,我在Oracle 10g数据库中得到了非常奇怪的结果 例如,当我在加载程序后进行类似的查询时: 从月份为空的mytable中选择* 我没有得到答案 但当我询问某一行时 从id=123的mytable中选择* 显示的行有一个“月”列(vharchar2(10)),该列为空!! 我从来没有看到过 在我的200000多行表格中,只有几行会发生这种情况 你知道会发生什么吗 我已切换回direct=false,它运行正常。。不再有奇怪的行为。。 我能做什么?测试Oracle直接加载似乎产生了奇怪的结果,oracle,oracle10g,Oracle,Oracle10g,自从使用压缩表将加载程序从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是您唯一做的更改吗?根据基础数据中的内容,可能一次运行会修剪月列,另一次运行会留下空格。