Могу ли я передать номер для varchar2 в Oracle?

У меня есть таблица Oracle и столбец (col1) имеет типvarchar2(12 byte), Имеет один ряд и значениеcol1 является1234

Когда я сказал

select * from table where col1 = 1234

Оракул говорит неверный номер. Это почему? Почему я не могу передать число, когда оноvarchar2?

РЕДАКТИРОВАТЬ: Все ответы великолепны. Спасибо. Но я не могу понять, почему он не принимает1234 когда1234 является действительным типом данных varchar2.

Ответы на вопрос(3)

en it is varchar2?

Oracle делает неявное преобразование из символьного типаcol1 к номеру, поскольку вы сравниваете его как число.

Кроме того, вы предполагаете, что1234 этоonly строка, которая извлекается. В действительности, Oracle должен извлечь все строки из таблицы, а затем отфильтровать согласноwhere пункт. Теперь значение символа вcol1 который выбирается до того, как он встретит вас1234 строка & amp; это вызывает ошибку, поскольку символ не может быть преобразован в число.

Это скрипка показывает поведение. посколькуabc не может быть преобразован в число, вы получите это сообщение об ошибке

Теперь, еслиonly запись в таблице соответствует записи col1, содержащей числовой символ, вы увидите, чтозаявление будет работать нормально

 Victor03 мая 2012 г., 17:18
Благодарю. очень хорошее объяснение
Решение Вопроса

что вы ожидаете, что Oracle неявно приведёт 1234 к символьному типу. Наоборот, Oracle неявно преобразует столбец в число. В столбце есть нечисловое значение, поэтому Oracle выдает ошибку.Документация Oracle предостерегает от неявных приведений непосредственно перед тем, как объяснить, как они будут разрешены. Правило, которое объясняет поведение, которое вы видите:

When comparing a character value with a numeric value, Oracle converts the character data to a numeric value.

 Victor03 мая 2012 г., 04:01
Благодарю. таким образом, символ 1234, который оракул неявно преобразует в число. ТАК почему ошибка с 1234 является действительным числом?
 03 мая 2012 г., 16:21
Что-то в таблице не является числом. Оракул оставляет 1234 как число. Он пытается преобразовать значение в столбце для соответствия. Когда он находит значение, которое не является числом, он выдает ошибку.

select *
from table
where col1 = to_char(1234)

Когда col1 не похож на число, to_number возвращает ошибку, останавливая запрос.

Ваш ответ на вопрос