ORA-01722 无效数字



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表中的lonlat字段使用了to_number()函数转换,

因此查找这张表中的不合法记录。

 

select * from scene_law_case t where isNumber(t.lon)<>’Y’ or isNumber(t.lat)<>’Y’;


将筛选出的记录手工处理后,再尝试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORA-01722错误的是**在Oracle数据库操作中遇到无效数字类型转换时引发的错误**。 当Oracle尝试将一个非数字类型的字符串转换为数字类型,但转换失败时,就会出现这个错误。例如,如果SQL语句中的某个字段预期是数字类型,但是实际上给出的是文本或包含非数字字符的字符串,那么在执行该语句时就会抛出ORA-01722错误。 为了解决ORA-01722错误,你可以采取以下几个步骤: 1. **检查数据类型**:确保你正在操作的数据与数据库表中相应字段的数据类型相匹配。如果不匹配,需要对数据进行适当的类型转换。 2. **使用正确的格式**:在编写SQL查询时,确保使用正确的数字格式。例如,避免在数字字符串中使用逗号或错误的小数点格式。 3. **显式类型转换**:如果需要进行类型转换,请使用Oracle提供的类型转换函数,如`TO_NUMBER`,并确保传递给它的字符串是可以正确转换为数字的。 4. **避免隐式转换**:在某些情况下,Oracle可能会尝试隐式地将一种数据类型转换为另一种数据类型。为了避免这种情况,应该显式地进行类型转换,并在查询中准确地定数据类型。 通过这些步骤,你应该能够避免或解决ORA-01722错误。如果你在实际操作中仍然遇到问题,可能需要进一步检查SQL语句和数据库表结构,以确保所有数据类型都是正确和一致的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值