ORA-01722:无效的号码

时间:2009-09-16 10:25:49

标签: sql oracle oracle10g ora-01722

当我使用单引号执行以下SQL命令输入数字时,我收到错误 如果删除单引号,则会成功更新。知道字段HEIGHT的类型是NUMBER。

奇怪的是,我尝试在不同的机器上使用相同的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 个答案:

答案 0 :(得分:6)

这很可能是语言环境问题。

也就是说,有些机器的小数符号是“。” (期间),有些人有“,”(逗号)。

你可以像这样测试它:

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

当数字为单个qoutes时,oracle将使用数据库中设置的字符隐式转换为数字。

您可以通过设置NLS_NUMERIC_CHARACTERS参数来更改默认值:

alter session set NLS_NUMERIC_CHARACTERS = '. ';

但这也会反映系统返回的数据,因此如果您更改了该数据,请确保它不会破坏您应用程序中的任何内容。

答案 1 :(得分:1)

字符串应使用单引号引用,数字不应该是。

也许你在无效语法有效的机器上使用不同的客户端?