当我使用单引号执行以下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.
答案 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)
字符串应使用单引号引用,数字不应该是。
也许你在无效语法有效的机器上使用不同的客户端?