2

当我使用单引号执行以下 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.
4

2 回答 2

6

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

也就是说,有些机器有十进制符号“。” (句号),有些有“,”(逗号)。

你可以这样测试它:

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

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

于 2009-09-16T10:30:50.500 回答
1

字符串应该用单引号引起来,数字不应该。

也许您在无效语法起作用的机器上使用了不同的客户端?

于 2009-09-16T10:29:47.973 回答