今天碰到了一个很奇怪的问题,原来很正常的系统突然报一个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-00132 ORA-00214
Oracle 11gr2连Oracle 19c 报ORA-28040 ORA-01017解决方法
kettle连接oracle12C--报错ORA-28040 没有匹配的验证协议
oracle数据库ora-01152和ora-01110的解决办法
oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht
错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...
oracle ORA-01033问题怎么解决 !! 能修复文件出错问题
Oracle_ORA-12518故障_处理,希望在此与大家分享,能够在实际的工作中提高解决问题的能力
oracle启动失败,ORA-00702报错,windows,linux系统下解决办法
oracle ORA-01033报错分析和解决方案跟踪文档
使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查。使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查 使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查
ora-03113错误
ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法ora-00604 错误 解决 方法
使用过程Oracle 表空间不足时,详细处理办法
客户端进行连接的时候,系统不定期出现ora-12520,ora-12516的连接问题, 问题解决方案建议: 1、增加process和session的连接数。 2、检查连接的应用,是不是有没有释放的连接。 3、将修改参数local_listener中的vip为...
Drop goldengate用户时,报ORA-00604 ORA-20782 ORA-06512错误
ERwin连接oracle报ORA-01041内部错误,hostdef扩展名不存在解决办法,实验可解决问题。
ora-01033:oracle initialization or shutdown in progress 解决方法 ora-01033:oracle initialization or shutdown in progress 解决方法 ora-01033:oracle initialization or shutdown in progress 解决方法 ora-...