当我使用单引号执行下面的SQL命令来输入一个数字时,我得到了一个错误,如果删除单引号,它将被成功更新。知道字段高度的类型是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.发布于 2009-09-16 10:30:51
这很可能是一个区域设置问题。
也就是说,有些机器有十进制符号“。(句号),还有一些有",“(逗号)。
你可以这样测试它:
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 = '. ';但这也会反映到系统返回的数据中,所以如果您更改了这一点,请确保它不会破坏应用程序中的任何内容。
发布于 2009-09-16 10:29:48
字符串应该用单引号引起来,数字不应该用单引号。
也许你在机器上使用了不同的客户端,其中的无效语法是有效的?
https://stackoverflow.com/questions/1432163
复制相似问题