выбор из столбца varchar2 с числовым значением иногда дает ошибку неверного числа - PullRequest
1 голос
/ 11 мая 2010

Я пытаюсь понять, почему в некоторых системах я получаю сообщение об ошибке неверного числа, когда пытаюсь выбрать значение из столбца varchar2, в то время как в других системах я не получаю сообщение об ошибке при выполнении точного то же самое.

Таблица выглядит примерно так:

ID   Column_1  Column_2
 1         V     text
 2         D        1
 3         D        2
 4         D        3

и запрос:

select ID
  from table
 where column_1='D'
   and column_2 = :some_number_value

: some_number_value всегда числовое, но может быть нулевым.

Мы исправили запрос:

select ID
  from table
 where column_1='D'
   and column_2 = to_char(:some_number_value)

Этот оригинальный запрос работает нормально на большинстве систем, но в некоторых системах выдает ошибку «неверный номер». Вопрос почему? Почему это работает на большинстве систем, а не на некоторых?

1 Ответ

3 голосов
/ 11 мая 2010

Это зависит от порядка, в котором проверяются ваши условия. Если сначала выполняется условие для column_1, то работает неявное преобразование column_2 в число. Если сначала проверяется column_2, то преобразование text в число завершается неудачно.

Оптимизатор решает, в каком порядке будут оцениваться условия. Если у вас есть индекс, например, column_2, но не column_1, этот индекс, вероятно, будет использоваться, поэтому преобразование завершится неудачей.


Что вы подразумеваете под "some_number_value всегда числовой, но может быть нулевым"? Проверка для column_2 = NULL не вернет никаких строк, NULL может быть оценена только с использованием IS NULL, а не = NULL.

...