`
myyugioh
  • 浏览: 20922 次
社区版块
存档分类
最新评论

【Oracle】ORA-01722 invalid number

阅读更多

今天碰到了一个很奇怪的问题,原来很正常的系统突然报一个ORA-01722的错误出来。

查了一下网上的资料,大多都说是因为ORACLE隐式转换数据类型引起的问题,如:

http://271788203.iteye.com/blog/653942

http://271788203.iteye.com/blog/653945

http://yml.iteye.com/blog/1591550

http://hypgr.iteye.com/blog/410415

http://zwpy.iteye.com/blog/1407815

但我觉得又不完全是这么回事。当然,我只是觉得而已,目前我的能力无法让我说出个所以然来。

 

总之先记录一下我的情况,以后有机会再详细研究:

数据库系统是10g,里面有两个数据库实例,简称为A库和B库。两个库都有两张张结构一样的TEST1和TEST2表,表中有个CODE字段,类型是VARCHAR2,但是数据值是纯数字(如011,022,033……)。

不过B库的TEST1表没数据,我把A库的数据导出为SQL脚本,再导入到B库中。

之后运行程序查询B库TEST1表,后台就报了ORA-01722异常,但是同样的程序查询A库没有任何问题。

接着我把程序构建的SQL语句拿到PL/SQL中测试,在A库中查询没有问题,在B库查询依然报ORA-01722异常。

原始SQL语句大致如下:

SELECT * FORM (
    SELECT T1.CODE,
           SUM(CASE T1.MONTH=201201 THEN T1.PAY ELSE 0 END) MONTH1,
           SUM(CASE T1.MONTH=201202 THEN T1.PAY ELSE 0 END) MONTH2,
           SUM(CASE T1.MONTH=201203 THEN T1.PAY ELSE 0 END) MONTH3
      FROM TEST1 T1 GROUP BY CODE
    UNION ALL
    SELECT T1.CODE,
           SUM(CASE T1.MONTH=201201 THEN T1.BONUS ELSE 0 END) MONTH1,
           SUM(CASE T1.MONTH=201202 THEN T1.BONUS ELSE 0 END) MONTH2,
           SUM(CASE T1.MONTH=201203 THEN T1.BONUS ELSE 0 END) MONTH3
      FROM TEST1 T1 GROUP BY CODE
    ) TATOL  
 JOIN TEST2 T2 
   ON TATOL.CODE = T2.CODE
WHERE TATOL.CODE IN (011,022,033)


  

根据网上的方法,把TATLO.CODE用函数显示转换后,查询就正常了。

无论是用TO_CHAR还是TO_NUMBER,或者NVL也行。如下:

--前面代码略
WHERE TO_CHAR(TATOL.CODE) IN (011,022,033)

 或者把参数值用单引号包起来。如下:

--前面代码略
WHERE TATOL.CODE IN ('011','022','033')

 

分享到:
评论

相关推荐

    oracle+ora-各种常见java.sq

    - `java.sql.SQLException: ORA-01555: snapshot too old: rollback segment number with name "" too small`: 回滚段不足以支持事务回滚。可能需要增大回滚段大小或者优化事务处理。 11. **内存问题** - `java....

    Oracle常用异常代码

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

    oracle错误代码大全

    ### Oracle 错误代码解析 #### ORA-00001: Unique constraint violated - **解释**: 当尝试插入或更新的数据违反了唯一性约束时触发此错误。 - **解决方案**: 检查数据是否重复,并确保每个字段值都是唯一的。 ##...

    oracle变更数据表字段类型

    1. **ORA-22858: invalid alteration of datatype** - 这个错误通常发生在尝试直接改变字段类型时,特别是在从固定长度的类型(如`VARCHAR2`)转换到变长类型(如`CLOB`)时。 - 解决方案是先创建一个新的字段,...

    oracle异常处理

    7. `Invalid_number` (ora-01722):尝试将非法字符串转换为数字。 8. `No_data_found` (ora-01403):SELECT INTO 未返回任何行,或引用了未初始化的索引表元素。 9. `Too_many_rows` (ora-01422):SELECT INTO 语句...

    Oracle_Errors描述

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

    Oracle Exception汇总(自定义Oracle异常)

    9. **INVALID_NUMBER** (ORA-01722): 当尝试将非数字字符串转换为数字时,如果转换失败,Oracle会抛出此异常。在处理数据时,需要验证输入的格式是否正确。 10. **LOGGIN_DENIED** (ORA-01017): 提供的用户名和密码...

    oracle常见Exception

    当尝试将非数字字符串转换为数字类型时,系统会抛出`INVALID_NUMBER`(ORA-01722)异常。 **解决方法:** 1. **验证输入**:确保所有用于数值计算的输入都是有效的数字格式。 2. **使用TRY/CATCH结构**:通过TRY/...

    oracle异常总结

    - `INVALID_NUMBER`(ora-01722):尝试将非数字字符串转换为数字时抛出。 - `ZERO_DIVIDE`(ora-01476):执行除法运算时,若除数为0则抛出。 - `ACCESS_INFO_NULL`(ora-06530):访问未初始化的对象时抛出。 - `...

    ORACLE 异常错误处理

    - `ORA-1722 Invalid-NUMBER`:转换一个数字失败。 - `ORA-6500 Storage-error`:内存不够引发的内部错误。 - `ORA-6501 Program-error`:内部错误。 - `ORA-6502 Value-error`:转换或截断错误。 - `ORA-6504 ...

    oracle 错误一览表

    #### ORA-00023: Redo log file number not in range - **描述**:重做日志文件编号超出范围。 - **解决方法**:确认重做日志文件配置正确且所有文件都存在。 #### ORA-00024: Mode does not allow dropping - **...

    SQLException

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

    oracle 10g错误代码手册

    - **ORA-01722: invalid number** - **含义**:输入的数值格式不正确。 - **解决方法**:检查并修正输入的数值。 #### 六、文档使用须知 - **版权信息**:文档受版权保护,不得非法复制或传播。 - **保密条款**...

    预定义异常

    7. **INVALID_NUMBER (ORA-01722)** - 描述:字符到数字的转换失败。 - 举例:尝试将非数字字符串转换为数值类型。 8. **LOGIN_DENIED (ORA-01017)** - 描述:使用无效的用户名或密码登录Oracle。 - 举例:当...

    Oracle 常用预定义异常

    7. **INVALID_NUMBER (ORA-01722)** - **描述**:当尝试将无法解析为数字的字符串转换为数字类型时触发。 - **示例场景**:例如,在输入非数字字符作为数字类型的参数时,就会触发此异常。 8. **NO_DATA_FOUND ...

    Oracle错误一览表

    #### ORA-00063: Log file number string not found 当指定的日志文件号不存在时,会触发此错误。这通常发生在日志切换或重做日志文件丢失时,需要检查日志文件的状态,并确保所有文件都可用。 #### ORA-00067: ...

    Oracle21个预定义异常

    - **错误代码**:ORA-01722 - **场景示例**:在执行涉及数字计算的查询时,若某字段值非数字格式,将导致此异常。 #### 8. LOGINDENIED - **异常描述**:提供的登录凭证(用户名或密码)不正确时触发。 - **错误...

    oracle异常(最全异常收集)

    #### ORA-1722:INVALID_NUMBER - **异常说明**:无效数字。 - **常见原因**: - 将非数字字符转换为数字类型时失败。 - 输入的数据格式不正确。 - **解决方案**: - 确保输入的数据是有效的数字格式。 - 使用...

    oracle常见错误代码的分析与解决

    其次,"ORA-01422"错误表示"EXACT FETCH RETURNS MORE THAN REQUESTED NUMBER OF ROWS",即精确提取返回的行数超过了请求的数量。这通常发生在使用SELECT INTO语句时,尝试将多行结果放入单个变量中。解决方法是改用...

    SQL LOADER错误小结

    ORA-01722: invalid number ``` 在这种情况下,可以尝试修改控制文件,避免将换行符视为数值的一部分。 3. **日期格式问题**: 当数据文件中的日期字段需要特殊格式处理时,可以使用`TO_DATE`函数来转换。确保...

Global site tag (gtag.js) - Google Analytics