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

今天上午技术部赶着测某个项目。其中一位说某个语句无法执行。

该语句大致如下:

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 先从最后一个条件 执行 然后是倒数第二个!!

 

不过我是不会纵容开发人员这样写错误的语句。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值