忽然有一天,好好的系统报错:ORA-01722 invalid number
环境:Oracle9 + JDBC访问数据库,之前是好的,忽然发现这个错误
后来参考了:http://davidyu720.itpub.net/post/31716/291191 才知道缘由
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
2. 因此写SQL语句的时候最好还是规规矩矩的写:
select mdn from tablename where mdn='13800000000'
什么问题都没有!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决