ORA-01722 字段中含有不能转换为数字的数据,一般出现在varchar类型向number类型转换。如果varchar类型含有非数字数据,或者含有不能合法转换的数字,就会触发这个报错。
编写函数协助找出不合法的数据记录。
create or replace function isNumber(p_invarchar2)
return varchar is
val_err exception;
pragma exception_init(val_err,-6502);
gd_num number;
begin
gd_num := to_number(p_in);
return ‘Y’;
exception
when val_err then
return ‘E’;
when others then
return ‘N’;
end;
/
以上函数是协助判断某个varchar2类型的字段是否能通过to_number正常转换,找到不能
正常转换的数据记录。
经与研发同事沟通,得知scene_law_case表中的lon,lat字段使用了to_number()函数转换,
因此查找这张表中的不合法记录。
select * from scene_law_case t where isNumber(t.lon)<>’Y’ or isNumber(t.lat)<>’Y’;
将筛选出的记录手工处理后,再尝试。