LYWILL设计运营 - 网站运营与推广、开发技术、成功项目展示。

Oracle 01722 invalid number错误

PL/SQL报错:ORA-01722 invalid number

后来参考了才知道缘由

1. 代码里面执行了如下SQL语句:

select mdn from tablename where mdn=13800000000

tablename表里面的mdn字段是varchar2()类型字段,由于Oracle的字段类型隐式转换功能

上面的SQL语句通常是可行的,查询的时候oracle解析该条件时,会首先to_number(mdn)

再和where mdn=13812345678进行比较判断,如果能够确保mdn字段里面存放的全为数字

那么这个语句是一直不会报错的(可能存在效率问题),但偏偏有人误操作在mdn里面加入了

几个字母133aa000000,如果还是上面的语句,并且表里面没有13800000000这个用户的数据,

当查询扫描到133aa000000时to_number(mdn)报错ORA-01722 invalid number。

有时候发现将函数调用放到SELECT列表中可以执行,如果放到WHERE条件中就会报错,也可能是这个原因。

2. 因此写SQL语句的时候最好还是规规矩矩的写:

select mdn from tablename where mdn='13800000000' --加上引号

标签: 数据库

作者:lywill 分类:开发技术 浏览:2465 评论:0