首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle-ORA-01722 invalid number错误

本来正常的,经过抓包才知道原来是数字型的无意中多了乱码!...,由于Oracle的字段类型隐式转换功能    上面的SQL语句通常是可行的,查询的时候oracle解析该条件时,会首先to_number(mdn)    再和where mdn=13812345678...因此写SQL语句的时候最好还是规规矩矩的写:     select mdn from tablename where mdn='13800000000' ORA-01722 invalid number...)=9 1)以前执行SQL时,ORACLE进行全表扫描,对每行的srvclass都转换为number型进行比较.以前表中的srvclass的取值只有字符0到9,所以没有出错; 2)后来表中加入了新数据...,srvclass的取值都是字母串,ORACLE进行全表扫描时,对新行上srvclass的to_number转换当然就返回ORA-01722 invalid number了。

1.6K50

【已解决】ORA-01722: invalid number

ORA-01722: invalid number 问题 invalid number 字符与数值不匹配 oracle 截取 ‘1-2’ 只需要’-'前面的 思路 一、问题提示 执行Oraclesql...语句提示【ORA-01722: invalid number】无效数字错误。...比如字段设计是:float类型,但是插入或修改的内容确实字符串【‘a’】) 2.2、对字段数据进行函数操作 即对字段进行求和(SUM)、求平均数(AVG)等函数操作,但是字段的数据却不匹配,比如(对字符串数字...【.12.5036】求和就会报错,正常应该是(12.5036)) 2.3、对数据进行转换操作 即需要转换数据的类型,比如将字符串数值内容转为数字类型,如(to_number(‘.12.5036’)或to_number...解决 使用Oracle的REGEXP_SUBSTR函数进行截取: SELECT REGEXP_SUBSTR('1-2', '[^-]+') FROM dual; 这里,REGEXP_SUBSTR函数用于从字符串中按照正则表达式匹配并截取子字符串

60620
您找到你想要的搜索结果了吗?
是的
没有找到

MOS文章实验:ORA-01722 from Queries with Dependent Predicates

会提示to_number的处理存在无效数字。...对于data列中22这个记录,包含NUMBER数字类型,因此转换是有效的,但对于其他行,这种转换就是无效的,因为不包含等价的数值,例如'Pet Foods Inc'。...@dbsnake的书中曾介绍过,Oracle会内置一些查询转换规则,只要目标SQL满足了这些规则的要求,Oracle就会对其执行查询转换。...Oracle 9i中查询转换是独立于优化器的,和优化器类型无关,因为Oracle此时认为经过查询转换后的等价改写SQL的执行效率一定比原目标SQL的执行效率高。...@dbsnake提过Oracle 10g及其以后的版本中,Oracle会对某些类型的查询转换计算成本,只有当等价改写SQL的成本值小于未经过查询转换的原始SQL的成本值时,Oracle才会对目标SQL执行这些查询转换

72120

故障分析 | MySQL 的隐式转换导致诡异现象的案例一则

select * from test where a = 0; 2问题分析 为了比对说明,我们分别用 MySQL、OracleSQL Server 进行模拟。...Oracle 执行直接报错,提示"无效数字",因为 a 是 VARCHAR2、0 是数字,因此报错是针对字段 a 的,需要将 a 转成数字,但字符是无法转成数字的,所以提示 "无效数字" 是合情合理的。...ORA-01722: 无效数字 SQL Server 执行直接报错,但是提示信息更加清晰明了,说的就是字段 a 的值 "测试a" 不能转成 INT 数值型。...小结 通过以上对比,可以知道 OracleSQL Server 对 "字符型=数值型" 的条件,会自动将字符型类型转成数值型,如果因为值的问题不能转成数值型,就会提示错误,而 SQL Server...毕竟对产品来说,避免错误可能比表面上能执行更加重要,但就这个问题上,OracleSQL Server 可以说更胜一筹的。 2.3 问题分析 MySQL 为什么在这里会给出错误的结果?

23040

Oracle优化器对谓词顺序处理的一个场景

最近听了个讲座,其中介绍到了Oracle的谓词,原始版本的例子,如下所示,从数据上能看到,c1='3'的时候,c2的值是个字符串类型的数字SQL> create table test(c1 char...如下测试,在Oracle 11g执行,提示错误,认为to_number的变量存在非法的数值类型, SQL> select to_number(c2) as value, c1 from test where...to_number(c2)>2 * ERROR at line 1: ORA-01722...如果按照语义,改造一下,子查询中指定where c1='3',打算得到的c2都是数值的字符串类型,然后在外层where value(to_number(c2))>2,但是仍然报"ORA-01722: invalid...例如c1存储的就是“数字”,如果定义为字符串类型,varchar2还好,char就出现了上述执行错误的场景,如果“数字”就使用数值类型number存储,就会绕过这个坑,同理,像“日期”用字符串类型存储存在相同的问题

55750

Oracle Index 索引无效原因及解决

索引无效原因 最近遇到一个Oracle SQL语句的性能问题,修改功能之前的运行时间平均为0.3s,可是添加新功能后,时间达到了4~5s。...调查途中,收集到一些Oracle 数据库不走索引的原因分享给大家 不走索引的原因 1....但是这只是在PL/SQL软件中运行SQL提高了速度,实际项目运行仍然是4~5s,使用语句查看索引的使用状况时,发现并没有使用索引,但是在PL/SQL软件中确实调用了索引,这至今都是未解之谜,如果有大神知道原因希望能帮我解答一下这个疑问...至此,SQL的效率问题已经解决了,但是这不是最好的解决方案。...中指定索引名,假如数据库中的索引名发生变更,还需去更改SQL

1.1K10

【DB笔试面试445】Oracle中的异常可以分为哪几类?

(3)当异常处理结束后,Oracle就将处理权交给调用者。结束PL/SQL块的运行。 Oracle将异常分为预定义异常、非预定义异常和自定义异常三种。...1、预定义异常(Predefined) 当PL/SQL应用程序违反了Oracle规定的限制时,就会隐含地触发一个内部异常,这就是预定义异常。...预定义异常用于处理常见的Oracle错误,对这种异常情况的处理,无需在程序中定义,由Oracle自动将其触发。它们全部放在PL/SQL自带的标准包中,这样程序员就无需再次定义了。...试图被零除 ORA-01722 INVALID_NUMBER 转换一个数字失败 ORA-06500 STORAGE_ERROR 内存不够或内存被破坏触发的内部错误 ORA-06502 VALUE_ERROR...使用预定义异常只能处理系统预定义的20多个Oracle错误,而当使用PL/SQL开发应用程序时,可能会遇到其它的一些Oracle错误。例如,在PL/SQL块中执行DML语句时,违反了约束规定等等。

1.7K10

Oracle和MySQL竟然可以这么写这样的SQL?(r12笔记第99天)

今天看到Franck Pachot‏ 发了一个Twitter,意思是Oracle里的SQL还能这么写。猛一看确实让人有些意外。 禁不住诱惑,自己也尝试了一番。我现在12cR2的环境中测试了一下。...Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 尝试上面的步骤,先来看看dual表。...dual * ERROR at line 1: ORA-01722: invalid number 如果对dual表抱有一丝幻想,那么我们换一个数据字典cat SQL> select...<2 * ERROR at line 1: ORA-01722: invalid number 如果你以为是12c里面的一些新特性这类的,其实在10g也是类似的结果。...MySQL篇 如果你认为这是Oracle优化器的强大,其实不然,我们看看MySQL里的表现,假设表为test_tab. > select -count(*) from test_tab; +------

78650
领券