项目场景

Oracle表字段为VARCHAR2时,where条件出现NUMBER的匹配,可能会出现该错误。


问题描述

test表结构如下

CREATE TABLE “lzy”.“TEST”
( “NAME” VARCHAR2(255)
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE “lzy”

数据

已知字段NAMEVARCHAR2类型

SELECT * FROM TEST WHERE NAME = 1

数据只有1时,不报错;
数据包含非数字,使用上述sql 查询,报错 ORA-01722:invalid number

结论

当表中数据全部为 数字,不会报错;
当表中数据包含 非数字,会报错。


原因分析

带着上面的结论,我们查找原因

查看Oracle的sql执行计划

explain plan for SELECT * FROM TEST WHERE NAME = 1;
select * from TABLE(dbms_xplan.display);

如图,发现了端倪

oracle会将字段通过to_number函数强转为NUMBER类型,再进行比对过滤

问题就出现在to_number函数这里,非数字强转NUMBER会报错ORA-01722:invalid number


解决方案

方案一(推荐)

老老实实比对正确的字段类型

SELECT * FROM TEST WHERE NAME = '1';

字段是什么类型就比对什么类型

方案二(不推荐)

当表中该字段的数据全部为数字类型的值,强转不会报错,也就可以继续使用该sql查询
但不推荐使用,原因有两点
1.容错性低。一旦数据被污染,线上一直报错,等着扣工资吧
2.效率低。Oracle会先将该字段下的所有数据转成数字类型,进行比对过滤,会损失一部分性能

ORA-01722:invalid number相关推荐

  1. Oracle出错 invalid number

    报错: invalid number 一定是因为字段关联时,字符串类型和数字类型相关联了.认真点找

  2. 构建Polygon多边形的时候提示 -- Invalid number of points in LinearRing (found 3 - must be 0 or = 4)

    最近在项目中由于导入的OSM(OpenStreetMap)数据量太大,暴露了一个先前就藏匿着的bug,只不过,随着数据量的增加,实例越来越多,测试就更加逼近实战,于是,这个bug终于爆炸了,只见控制台 ...

  3. 问题解决:Invalid version number:Version number may be negative or greater than 255

    问题描述: 本人java版本1.8,使用Idea运行一个简单的SpringBoot项目出现以下问题: Invalid version number: Version number may be neg ...

  4. 报错:OSError: [Errno -9998] Invalid number of channels(成功解决、采坑经历)

    目录 1. 问题 2. 解决 2.1 更改 代码中的 channels 数目 2.2 尝试重装 pyaudio 1. 问题 使用 Mac. jupyter notebook.pyaudio,想要实现音 ...

  5. Oracle-ORA-01722 invalid number错误

    本来正常的,经过抓包才知道原来是数字型的无意中多了乱码! 本来是3276的居然多了后面一串 3276PuAnrSeU2zliU+IV/FHlnX2Xgia1au2xX2vMWtw http://www ...

  6. 讨厌麻烦的ora 01722无效数字

    webservice开发过程中,数据库由原来的oracle改为现在的sql server.然后重新调试,结果报出ora 01722无效数字的错误. 由于连接oracle数据库的时候并没有问题,所以一开 ...

  7. oracle能用hql吗,使用HQL查询日期,Oracle报“Invalid number”

    如题,Oracle数据库里面有一批记录,现在我想根据其中一个叫:txn_date的字段来查询记录,在Hbm文件中我配置了该HQL,如下所示: select {job.*} from Newslette ...

  8. 关于Oracle执行sql语句报错[ORA-01722: invalid number]无效数字解决思路

    一.问题提示 执行Oracle的sql语句提示[ORA-01722: invalid number]无效数字错误. 二.问题分析 2.1.类型不匹配 即数据库中字段的设计类型与插入.修改的类型不统一( ...

  9. Invalid number format for port number

    Invalid number format for port number(链接ORACLE时忘记加端口出现的错误) JspException:org.apache.commons.dbcp.SQLN ...

  10. Invalid number format for port number(链接ORACLE时忘记加端口出现的错误)

    错误:java.sql.SQLException: Invalid number format for port number 原因:连接oracle时端口号错误: 解决: jdbc:oracle:t ...

最新文章

  1. qt5中字符串转字符串数组_Qt中的对象类型转换(Qstring 转换char*有三种方法)
  2. Jenkins中运行脚本提示“Permission denied”,没有权限解决方法(MacOS)
  3. linux中yum安装splunk,Yum源搭建
  4. python评分卡建模-卡方分箱
  5. 掌握基本的Java程序开发过程 题库 1213
  6. ASP获取上月本月下月的第一天和最后一天
  7. NEC协议——红外遥控的使用
  8. linux 双网卡 双交换机,linux双网卡bond及交换机配置
  9. 腾讯广告招人啦,校招优质岗位你不容错过!
  10. JQuery简要介绍(转)
  11. Windows下SQLMAP的安装图解
  12. yarn : 无法加载文件 C:\Users\HYGK\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsof
  13. 客服回复话术100句
  14. 微软和NASA强强联手,重磅推出Python免费课程
  15. P1048 [NOIP2005 普及组] 采药
  16. 深度deepin20打印失败“Can’t create temporary file”解决方法
  17. 5.前端CSS之基本属性(长宽,字体,文体,背景图片,阴影,border画圆,display)
  18. 《The One 团队》:第九次团队作业:BETA冲刺与团队项目验收
  19. Android仿iphone时间轴相册
  20. DNS服务器配置和测试

热门文章

  1. SProject - 02.iPad生产力工具——Blink Shell移动设备随时随地写代码
  2. 联邦学习(Federated Learning)学习小记
  3. python求残差_在python中如何计算点过程的残差
  4. 连续型随机变量单点概率为0以及不可能事件
  5. 高等数学-考试常用的三角函数公式
  6. 人力资源管理系统(大二数据库课设) spring boot,Mybatis+bootstap,ajax项目
  7. java 添加盲水印_图片加数字盲水印
  8. 企业成本核算程序是怎样?一般采用什么方法
  9. 显著性检测论文梳理(Saliency Detection)
  10. 使用kali系统中legion工具包进行漏扫时闪退,原因是legion工具包版本问题,使用命令sudo apt-get install legion更新一下就解决了