您的位置:首页 > 其它

to_number不了字段-ORA-01722 无效数字

2013-12-31 12:31 363 查看
今天上午技术部赶着测某个项目。其中一位说某个语句无法执行。
该语句大致如下:
select param_value
from table
where param_type='bank'
and to_number(param_value)=0.78
这是个从参数表取参数。 这个在线上库已经旧的开发库能正确执行!!
param_value nvarchar2(200)
然后他们说新的开发库有问题。郁闷哦!
检查了线上和线下的库的字符集也一样。修改XP的NLS_LANG 也无效!
百得不其解

ORA-01722 无效数字 根据这提示 查看了所有的param_value 果真有中文在里面
然而
select param_value,to_number(param_value)
from table
where param_type='bank'
没问题 而且都是存得是数字。
为什么在加个条件就报错呢? 为什么在线上库就不会呢?
然后打开执行计划 看过来条件。线上先执行TYPE过滤,然后再执行to_number(parame_value)条件。
线下根据执行计划不同而做了调整,

select /*+rule*/sp.param_code, to_number(sp.param_value), sp.param_value
from sys_service_param sp
where 1=1
and to_number(sp.param_value) =0.78
and sp.param_type_code = 'bank_norm_rate'

增加规则提示 告诉ORACLE 先从最后一个条件 执行 然后是倒数第二个!!

不过我是不会纵容开发人员这样写错误的语句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: