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

Когда я выполняю приведенную ниже команду SQL, используя одинарные кавычки для ввода числа, я получаю сообщение об ошибке, если удалить одинарные кавычки, она успешно обновляется. зная, что тип поля HEIGHT НОМЕР.

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

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

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.

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 = '. ';

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

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

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

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