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 = '. ';
но это также отразится на данных, возвращаемых системой, поэтому убедитесь, что они ничего не нарушают в вашем приложении, если вы это измените.
Строки должны быть заключены в одинарные кавычки, цифры не должны быть.
Может быть, вы используете другой клиент на машинах, где работает неправильный синтаксис?