ORA-01722: неверный номер

Когда я выполняю приведенную ниже команду SQL, используя одинарные кавычки для ввода числа, я получил сообщение об ошибке, если удалить одинарные кавычки, он успешно обновлен. зная, что тип поля ВЫСОТА - ЧИСЛО.

Странно то, что я пытался использовать один и тот же оператор sql с одинарными кавычками на разных машинах, на некоторых машинах он выполняется успешно, на других - нет (та же версия оракула, та же структура таблицы ...)

Любое объяснение, пожалуйста

SQL>  UPDATE TBL_DEVICE_INFO SET HEIGHT='14.5'  WHERE ID='6ujbfI';
 UPDATE TBL_DEVICE_INFO SET HEIGHT='14.5'  WHERE ID='6ujbfI'
                                   *
ERREUR à la ligne 1 :
ORA-01722: invalid number



SQL>  UPDATE TBL_DEVICE_INFO SET HEIGHT=14.5  WHERE ID='6ujbfI';

1 row updated.

person Community    schedule 16.09.2009    source источник


Ответы (2)


Скорее всего, это проблема локали.

То есть на некоторых машинах есть десятичный знак "." (точка), а в некоторых есть "," (запятая).

Вы можете проверить это, написав так:

UPDATE TBL_DEVICE_INFO 
   SET HEIGHT = to_number('14.5', '99D9','NLS_NUMERIC_CHARACTERS = ''. ''') 
   WHERE ID='6ujbfI'

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

Вы можете изменить значение по умолчанию, установив параметр NLS_NUMERIC_CHARACTERS:

alter session set NLS_NUMERIC_CHARACTERS = '. ';

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

person Jimmy Stenke    schedule 16.09.2009

Строки следует заключать в одинарные кавычки, числа не должны.

Может быть, вы используете другой клиент на машинах, на которых работает неверный синтаксис?

person Glen    schedule 16.09.2009