Oracle报ORA-01722错误的排查经验
2012-04-09 11:10
316 查看
最近开发的一个C++程序中,通过OCI访问数据库,在某个查询的时候,报ORA-01722错误。Oracle关于1722错误的描述是这样的:ORA-01722: invalid number(无效数字)。
刚开始排查SQL语句是否有问题,发现同样的SQL语句在PL/SQL dev中执行不会报错。
经过多次排查,最后发现原因在于调用OCIDefineByPos()函数绑定变量和字段的映射关系时,顺序对应错了,导致变量的数据类型和字段的数据类型不一致,结果就是字符转换数字失败,报01722错误。
报ORA-01722这个错误,一般来说,是由于试图将字符串转换为数字的时候失败,具体的原因在于字符串中可能含有不是数字的字符。
以下总结出两点,以后如果有发现这一错误,请从这两方面排查。
如果发生ORA-01722错误,可能的原因有两种:
1)执行的sql语句中包含显示或者隐式的类型转换,将字符串转换到数字类型的时候失败,字符内容包含非数字字符。解决方法:检查SQL语句是否包含对字段类型的转换。
2)将一个字符(varchar2)字段绑定(DefineByPos)到数字(number)类型,从而在取结果时,转换失败。解决方法:检查绑定变量和对应的字段是否顺序对应,数据类型对应。
刚开始排查SQL语句是否有问题,发现同样的SQL语句在PL/SQL dev中执行不会报错。
经过多次排查,最后发现原因在于调用OCIDefineByPos()函数绑定变量和字段的映射关系时,顺序对应错了,导致变量的数据类型和字段的数据类型不一致,结果就是字符转换数字失败,报01722错误。
报ORA-01722这个错误,一般来说,是由于试图将字符串转换为数字的时候失败,具体的原因在于字符串中可能含有不是数字的字符。
以下总结出两点,以后如果有发现这一错误,请从这两方面排查。
如果发生ORA-01722错误,可能的原因有两种:
1)执行的sql语句中包含显示或者隐式的类型转换,将字符串转换到数字类型的时候失败,字符内容包含非数字字符。解决方法:检查SQL语句是否包含对字段类型的转换。
2)将一个字符(varchar2)字段绑定(DefineByPos)到数字(number)类型,从而在取结果时,转换失败。解决方法:检查绑定变量和对应的字段是否顺序对应,数据类型对应。
相关文章推荐
- Oracle报ORA-01722错误的排查经验
- 记一次 oracle ORA-01722: 无效数字 错误排查
- Oracle-ORA-01722 invalid number错误
- 关于在.NET中通过Parameter方式插入Oracle数据的错误提示——Oracle-ORA-01722 invalid number
- Oracle-ORA-01722 invalid number错误
- Oracle-ORA-01722 invalid number错误
- "ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小"的解决,总结一下oracle开发的小经验
- Oracle错误: ORA-01722 无效数字
- Oracle-ORA-01722 invalid number错误
- ORACLE ORA-01653: unable to extend table 的错误
- oracle 11G ORA-03113 ORA-19815错误
- oracle错误 ORA-01950 对表空间"system"无权限
- oracle ORA-01722:无效数字 记录
- Oracle 11g下ORA-00119和ORA-00132错误的解决
- oracle ORA-12899错误的解决方法
- ofbiz ORA-01843: 无效的月份错误 ORA-01843: not a valid month while using oracle database
- 强制删除DBF文件导致数据库报“ORA-01033: ORACLE 正在初始化或关闭”错误
- 关于ORACLE提示:"System.Data.OracleClient.OracleException: ORA-06550: 第 1 行, 第 7 列: \nPLS-00306: 调用 'xxxxxx' 时参数个数或类型错误\nORA-06550: 第 1 行, 第 7 列: \nPL/SQL: Statement ignored\n\r\n 的错误
- 浅谈ORACLE中ORA-06502:PL/SQL:数字或值错误:字符到数值的转换错误
- Oracle 11g参数修改错误导致数据库无法启动的处理方法.[ORA-01034,ORA-27101,ORA-00824]