Прямая загрузка Oracle, кажется, дает странные результаты - PullRequest
2 голосов
/ 26 октября 2010

Я получил очень странные результаты в своей базе данных Oracle 10g с того дня, как я переключил свои загрузчики с прямого = ложного на прямой = true для сжатых таблиц.

Например, когда я делаю такой запрос после загрузчика:

выберите * из таблицы, где месяц равен нулю

я не получаю ответа ..

но когда я запрашиваю определенную строку выберите * из mytable, где id = 123 строка, которая появляется, имеет столбец "месяц" (vharchar2 (10)), который является нулевым !! Я никогда не видел этого ..

И это происходит только с несколькими строками в моей таблице 200000+ строк.

Вы видите, что может случиться?

Я переключился обратно на прямое = ложное, и все работает нормально .. больше нет странного поведения .. Что я могу сделать ? тест?

Спасибо

Ответы [ 3 ]

3 голосов
/ 26 октября 2010

Возможно, ваш столбец не нулевой, но содержит непечатаемые символы.Не могли бы вы сделать дамп для столбца, например:

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
2 голосов
/ 27 октября 2010

Любые ограничения для таблицы, в частности, ограничение NOT NULL для этого столбца.Состояние ограничения (отложенное, отключенное, novalidate) может создавать странности.

Если ограничение установлено на NOVALIDATE, но доверенное, тогда оптимизатор может увидеть «Ага, этот столбец не может быть пустым, поэтому я не будудаже не глядя ".

1 голос
/ 26 октября 2010

Если вы просматриваете результат в инструменте (таком как toad или sql developer), возможно, в строке есть пробелы / разрывы управления, которые отображаются неправильно. Попробуйте выполнить следующий запрос и показать результаты.

select month, nvl(month,'Month is NUll'), length(month) 
     from mytable 
     where id = 123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...