Oracle报错--无效数字
(2018-04-19 11:48:48)
标签:
oracleerror无效数字 |
分类: Oracle |
ORA-01722:无效数字
主要原因是:
1、对于两个类型不匹配(一个数字类型,一个非数字类型,同下)的值进行赋值操作;
2、两个类型不匹配的值进行比较操作(例如,“=”);
3、to_number函数中的值,非数字的,比如,to_number('a')肯定是不行的,to_number('12306')则是正常的。
要避免这些问题,要做到在写sql语句时就好认真处理好不同类型的问题。
比如如果要比较的话,同时都用to_number强制转换(to_number(字段a) =
to_number(字段b)),或者同时转换为字符串类型(字段a||'' =
字段b||'',都连接一个空字符串使之变成字符串类型)。
在语句中使用to_number函数时,要保证值一定是数字格式,或者写好异常处理。
当我们碰到这个错误提示时,就从所有用到的数字类型的字段开始检查,逐一排查,从而解决问题。
举例:
-- Test CODE_RESULT_COUNTERPARTY
select sum(case when tsk.code_result_counterparty <>
nvl(to_char(tcp.t_manualenum_1) ,'XNA') then 1 else 0 end) cnt_err,
from owner_dwh.f_camp_task_ad tsk
left join t_counterparty_imp tcp on tcp.t_taskcalendar_1 =
tsk.id_source
--
where 1=1
;
通过查看两个蓝色字段,发现 左侧蓝色字段为‘字符类型’,右侧蓝色字段为‘数字类型’,这是导致出现‘错误--无效数字’的原因,属于上文提到原因中的第2种。因此,在右侧加上了显示转换to_char() ,解决了问题。