Выбор из столбца 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
,