首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-01722:无效数字

ORA-01722:无效数字
EN

Stack Overflow用户
提问于 2009-09-16 10:25:49
回答 2查看 5.8K关注 0票数 2

当我使用单引号执行下面的SQL命令来输入一个数字时,我得到了一个错误,如果删除单引号,它将被成功更新。知道字段高度的类型是NUMBER。

奇怪的是,我试图在不同的机器上使用带有单引号的同一个sql语句,有些机器执行成功,有些机器执行失败。(相同的oracle版本,相同的表结构……)

有什么解释吗?

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

发布于 2009-09-16 10:30:51

这很可能是一个区域设置问题。

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

你可以这样测试它:

代码语言:javascript
复制
UPDATE TBL_DEVICE_INFO 
   SET HEIGHT = to_number('14.5', '99D9','NLS_NUMERIC_CHARACTERS = ''. ''') 
   WHERE ID='6ujbfI'

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

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

代码语言:javascript
复制
alter session set NLS_NUMERIC_CHARACTERS = '. ';

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

票数 6
EN

Stack Overflow用户

发布于 2009-09-16 10:29:48

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1432163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档