Выбор из столбца varchar2 с числовым значением иногда дает ошибку неверного числа

Я пытаюсь понять, почему в некоторых системах я получаю сообщение об ошибке неверного числа, когда пытаюсь выбрать значение из столбца 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 ответ

Решение

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

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


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

Другие вопросы по тегам