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 先从最后一个条件 执行 然后是倒数第二个!!
不过我是不会纵容开发人员这样写错误的语句。
该语句大致如下:
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 先从最后一个条件 执行 然后是倒数第二个!!
不过我是不会纵容开发人员这样写错误的语句。
相关文章推荐
- 使用to_number函数,提示ORA-01722无效数字的解决方法
- oracle to_namber之后报ora-01722:无效数字
- 【Oracle】ORA-01722:无效数字(控制文件最后一个字段)
- oracle ORA-01722无效数字
- 数据库-ORA-01722:无效数字
- PreparedStatementCallback; SQL [insert into person values(?,?,?)]; ORA-01722: 无效数字
- Oracle 参数化更新数据时报错:Oracle ORA-01722: 无效数字
- 用正则表达式定位引起ORA-01722: 无效数字的问题数据
- ORA-01722:无效数字
- ORA-01722 无效数字的处理
- Oracle错误: ORA-01722 无效数字
- java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
- ORA-01722:无效数字
- ORA-01722: 无效数字的解决方法
- 检查表中因转换数字类型时出现 ORA-01722:invalid number 的方法
- Asp.net SqlDataSource中使用like,报错ORA-01722: 无效数字
- ORA-01722:无效数字
- PreparedStatement批量向数据库插入数据报了这个异常:java.sql.SQLException:ORA-01722: 无效数字
- java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
- ORA-01722:无效数字