首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-01722: to_number中的无效编号

ORA-01722: to_number中的无效编号
EN

Stack Overflow用户
提问于 2018-08-20 06:42:53
回答 3查看 13.5K关注 0票数 5

我试着用发票号连接两个表中的数据,

代码语言:javascript
复制
LOC         NOT NULL VARCHAR2(40)
INV_ORG            NUMBER

就像这样,效果很好:

代码语言:javascript
复制
SELECT     oh.inv_org,e.loc
FROM       headers oh, sites e
WHERE
AND e.location = TO_CHAR(oh.inv_org);

但是,当我试图将字符转换为数字时,我得到ORA-01722:无效数字。

代码语言:javascript
复制
SELECT     oh.inv_org, e.loc
FROM       headers oh, sites e
WHERE
AND to_number(e.loc) = oh.inv_org;

错误报告 ORA-01722:无效号码

我不知道为什么,因为在select中,转换也很好

代码语言:javascript
复制
INV_ORG  110992
LOC  110992
OH.INV_ORG-TO_NUMBER(E.LOC) 0
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-20 06:59:57

检查您的数据,有可能在e.loc中有一个值不能转换为数字。

顺便说一下,下面的select给了ORA-01722:

SELECT to_number('test') FROM dual

票数 4
EN

Stack Overflow用户

发布于 2018-08-20 07:04:28

如果这不起作用:

代码语言:javascript
复制
SELECT     oh.inv_org, e.loc
FROM       headers oh, sites e
WHERE
AND to_number(e.loc) = oh.inv_org;

这意味着有些e.loc值不能转换为数字(例如字母)。因此,您应该使用有效的查询(因为将oh.inv_org转换为字符串没有问题):

代码语言:javascript
复制
SELECT     oh.inv_org,e.loc
FROM       headers oh, sites e
WHERE
AND e.location = TO_CHAR(oh.inv_org);

然而,整个故事意味着当前的数据模型没有被正确地设置。您要加入的列可能需要在某种外键约束中使用,即

  • 应该有一个包含位置的表,
  • 它应该有一个主键,并且
  • 主键列应同时从标头和站点表中引用。

如果是这样的话,你现在就不会有问题了。

哦,是的--而且,尝试切换到ANSI连接,不会解决你当前的问题,但会在未来得到回报。

代码语言:javascript
复制
SELECT oh.inv_org,e.loc
FROM   headers oh join sites e on e.location = to_char(oh.inv_org);
票数 4
EN

Stack Overflow用户

发布于 2018-08-20 06:54:31

尝试如下: to_number函数接受两个参数

代码语言:javascript
复制
SELECT     oh.inv_org, e.loc
FROM       headers oh, sites e
WHERE
 to_number(e.loc,'9999999') = oh.inv_org;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51925307

复制
相关文章

相似问题

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