`
Virgo_S
  • 浏览: 1151121 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ORA-01722: 无效数字的解决方法

阅读更多
Select Count(t.Wip_No) As Consignvendnewcreateno_Num
From   Apps.View_Scm_Wip_Po t
Where  1 = 1
And    t.Organization_Id = 85
And    t.Vendor_Site_Id = 31
查询后报错:
ORA-01722: 无效数字
修改后正常:
Select Count(t.Wip_No) As Consignvendnewcreateno_Num
From   Apps.View_Scm_Wip_Po t
Where  1 = 1
And    nvl(t.Organization_Id,0) = 85
And    t.Vendor_Site_Id = 31
如果不加nvl它就解释不出来
nvl( ) 函数
从两个表达式返回一个非 null 值。
语法
NVL(eExpression1, eExpression2)
参数
eExpression1, eExpression2
如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。
返回值类型
字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值
说明
在不支持 null 值或 null 值无关紧要的情况下,可以使用 NVL( ) 来移去计算或操作中的 null 值。
select nvl(a.name,'空得') as name from student a join school b on a.ID=b.ID
注意:两个参数得类型要匹配
一个查询 select to_number(c.name) as srvtype, value as typename from sys_code c where c.srvclass=9 --srvclass为字符型
一直工作得很好,但突然一天返回错误ORA-01722 invalid number。由于条件srvclass字段是varchar2类型,就想当然地以为是ORACLE的 bug(恰巧上周刚确认了ORACLE的一个查询bug),将条件改写成 c.srvclass='9'后,查询就又能运行了。

事情虽然过去了,可总觉得有点不对劲。首先ORACLE不可能出现这么简单的 BUG;其次就算是BUG,返回的错误提示也不应该是 invalid number。按理说,即使ORACLE不能自动完成类型转换而要求写成 srvclass='9',那么对srvclass=9这种写法的错误提示也应该是invalid character。但由于直觉作怪,也就没有深究


正好space6212提出了他对bug解释的疑问,我就从头进行检查,才发现错误的根本原因是:ORACLE将where c.srvclass=9解释为where to_number(c.srvclass)=9
1)以前执行SQL时,ORACLE进行全表扫描,对每行的srvclass都转换为number型进行比较.以前表中的srvclass的取值只有字符0到9,所以没有出错;
2)后来表中加入了新数据,srvclass的取值都是字母串,ORACLE进行全表扫描时,对新行上srvclass的to_number转换当然就返回ORA-01722 invalid number了。
分享到:
评论
1 楼 ddacz1314 2014-03-06  
使用正则,例如:to_number(REGEXP_REPLACE(字段A,'[a-zA-Z/:.]',''))

相关推荐

    oracle ora-各种常见java.sql.SQLException归纳

    ORA-01722: 无效数字 ORA-01722 是一个常见的错误信息,通常发生在尝试将字符串类型的值填入数字型时。这种错误通常是由于开发者在编写 SQL 语句时,忘记了某个列名或写错了列名,导致 Oracle 无法将字符串类型的值...

    kettle_使用中的一些常见问题

    错误描述:在尝试插入数据时,Oracle 报告 `ORA-01722: 无效数字` 错误,这通常是因为字段格式不匹配。例如,字段 "field2" 的值 "1,798" 被识别为字符串而非数字。 解决方案:在 Kettle 的【Excel 输入步骤】中,...

    Oracle数据库并行查询出错的解决方法

    ORA-01722:无效数字 12801.00000 -error signaled in parallel query server %s *Cause: A parallel query server reached an exception condition. *Action: Check the following error message for

    oracle 数据库错误一览表

    十、ORA-01722:无效数字 这意味着试图将非数字字符串转换为数字。检查输入数据的格式,确保它们符合数字的预期格式。 以上只是Oracle数据库错误中的一部分,实际使用中可能会遇到更多种类的错误。对于每个错误,...

    oracle常用命令及错误类型(error message)

    4. ORA-01722:无效数字 - 解决:确保将字符串转换为数字时输入正确格式的数据。 5. ORA-00911:非法字符 - 解决:检查SQL语句中的语法,确保没有非法字符。 6. ORA-01017:用户名/口令无效 - 解决:确认登录...

    Oracle错误代码集合[归类].pdf

    25. ORA-17026: 数字溢出,当数值运算结果超过了数据类型的允许范围时,会抛出这个错误。 以上仅是部分Oracle错误代码的解析,每个错误代码都对应着特定的故障情况,解决这些问题需要结合具体的上下文和数据库日志...

    Oracle常用异常代码

    INVALID_NUMBER (ORA-01722) **异常描述:** 当尝试将非数字字符串转换为数值类型时触发此异常。 **解决方法:** - 在转换之前验证输入数据是否为有效的数字格式。 - 使用适当的错误处理逻辑来捕获并处理此类异常...

    Oracle错误代码及解决方法

    错误号是一个三位或四位的数字,如ORA-00001,其中“ORA”是Oracle的前缀,后面的数字是具体的错误编号。 2. ORA-00001:唯一性约束违反。这个错误通常发生在尝试插入或更新违反唯一键约束的数据时。解决方法包括...

    Oracle错误代码集合[参考].pdf

    15. ORA-17021 至 ORA-17050: 包含一系列的类型定义、数据处理和转换错误,例如丢失的定义、不支持的特性、数字溢出、无效的长度或类型不匹配。 16. ORA-17051 至 ORA-17069: 主要涉及UDT(用户自定义类型)、REF、...

    Oracle 错误集选

    ### ORA-01722: 无效数字 当尝试将非数字字符转换为数字时,会出现这个错误。确保输入数据的格式正确,避免非数字字符混入数字字段。 ### ORA-01776: 无法通过连接视图修改多个基表 此错误发生在试图通过连接视图...

    oracle错误报告.docx

    解决方法是缩短字段长度或改变数据类型。 2. ORA-00911: 无效字符。此错误表明标识符的起始字符或包含不允许的字符。标识符应以字母、数字、$、#或_开始,后续字符可以是这些字符加上双引号内的任意字符。避免使用...

    ORACLE 错误一览表part1

    4. ORA-01722: 无效数字 这个错误通常出现在试图将非数字字符转换为数字,或者数字格式不正确时。检查涉及数值操作的列和表达式,确保数据类型匹配。 5. ORA-00911: 无效字符 这表明SQL语句中包含了Oracle数据库不...

    ORACLE错误码大全_中文

    Oracle错误码是数据库在运行过程中遇到问题时给出的反馈,通常以"ORA-"开头,后跟三位或四位数字。这些错误码可以帮助我们定位问题的根源,并采取相应的解决措施。 1. ORA-00001: 违反唯一约束条件 当插入或更新的...

    SQLException

    7. **ORA-01722: invalid number** - **含义**:在SQL语句中,字符串转换为数字失败,因为该字符串不是有效的数字格式。 - **解决方法**:确保所有的数值输入都是正确的格式。 8. **ORA-06530: ACCESS_INTO_NULL...

    oracle常见错误解析

    6. ORA-01722: 无效数字 这个错误表示在尝试将非数字字符串转换为数字时发生了错误。检查SQL语句中的数值操作,确保所有的数字格式正确无误。 7. ORA-02091: 事务处理中断 如果事务中的一个操作失败,会导致整个...

    ORACLE+错误一览表 第一部分

    5. ORA-01722:无效数字。当尝试将非数字字符串转换为数字时,或者数字格式不正确,会出现这个错误。 理解这些错误代码和其对应的解释对于数据库管理员和开发人员来说至关重要,因为它们可以帮助快速定位问题所在,...

    Oracle错误代码一览表

    解决方法是检查数据是否重复,并确保在插入或更新前数据的唯一性。 #### ORA-00017: 资源等待时间过长 该错误表明有进程因等待资源而超时,可能是由于锁竞争、死锁或其他资源争用引起。优化查询性能、调整并发控制...

    Oracle_Errors描述

    6. **ORA-01722: invalid number** 当试图将非数字字符串转换为数字,或者数字格式不正确时,会触发此错误。确保数据类型匹配或输入数据的格式正确即可避免。 7. **ORA-00911: invalid character** 在SQL语句中发现...

    ORACLE 错误一览表

    Oracle错误代码一般由三位或四位数字组成,例如“ORA-00001”,“ORA-12154”等。每个错误代码都对应一个特定的错误信息,描述了错误发生的原因和可能的解决方案。下面我们将详细探讨一些常见的Oracle错误及其含义:...

    oracle异常(最全异常收集)

    - **异常说明**:无效数字。 - **常见原因**: - 将非数字字符转换为数字类型时失败。 - 输入的数据格式不正确。 - **解决方案**: - 确保输入的数据是有效的数字格式。 - 使用适当的函数或方法对数据进行转换。...

Global site tag (gtag.js) - Google Analytics