本来正常的,经过抓包才知道原来是数字型的无意中多了乱码!...,由于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了。
会提示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执行这些查询转换
ORA-01722: invalid number 问题 invalid number 字符与数值不匹配 oracle 截取 ‘1-2’ 只需要’-'前面的 思路 一、问题提示 执行Oracle的sql...语句提示【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函数用于从字符串中按照正则表达式匹配并截取子字符串
Windows 10 环境下,MyEclipse 10, JDK 1.7 32位,Tomcat 6 32位,Oracle版本:oracle 11g r2。 ---- 1....Cause: java.sql.SQLException: ORA-01722: 无效数字 原因——本质原因是入参和数据库表字段数据类型不匹配,报错可能存在以下两种情况: (1)可能一:入参数据类型不对...=4099; // 报错:无效数字 select * from user t where t.pro_id !...=4099; // 没错 oracle数据库的 sql 语句中=是用数字比较的,因此 oracle 会自动把字符串类型转换成数字进行比较。...java.sql.SQLException: 无效的列类型 数据类型与数据库表的不一致
查看当前无效对象 select * from dba_objects t where t.status = 'INVALID' order by 1; 编译无效对象: 有两种方式: 1、执行sql查询结果.../rdbms/admin/utlrp.sql ----
select * from test where a = 0; 2问题分析 为了比对说明,我们分别用 MySQL、Oracle 和 SQL Server 进行模拟。...Oracle 执行直接报错,提示"无效数字",因为 a 是 VARCHAR2、0 是数字,因此报错是针对字段 a 的,需要将 a 转成数字,但字符是无法转成数字的,所以提示 "无效数字" 是合情合理的。...ORA-01722: 无效数字 SQL Server 执行直接报错,但是提示信息更加清晰明了,说的就是字段 a 的值 "测试a" 不能转成 INT 数值型。...小结 通过以上对比,可以知道 Oracle 和 SQL Server 对 "字符型=数值型" 的条件,会自动将字符型类型转成数值型,如果因为值的问题不能转成数值型,就会提示错误,而 SQL Server...毕竟对产品来说,避免错误可能比表面上能执行更加重要,但就这个问题上,Oracle 和 SQL Server 可以说更胜一筹的。 2.3 问题分析 MySQL 为什么在这里会给出错误的结果?
最近听了个讲座,其中介绍到了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存储,就会绕过这个坑,同理,像“日期”用字符串类型存储存在相同的问题
索引无效原因 最近遇到一个Oracle SQL语句的性能问题,修改功能之前的运行时间平均为0.3s,可是添加新功能后,时间达到了4~5s。...调查途中,收集到一些Oracle 数据库不走索引的原因分享给大家 不走索引的原因 1....但是这只是在PL/SQL软件中运行SQL提高了速度,实际项目运行仍然是4~5s,使用语句查看索引的使用状况时,发现并没有使用索引,但是在PL/SQL软件中确实调用了索引,这至今都是未解之谜,如果有大神知道原因希望能帮我解答一下这个疑问...至此,SQL的效率问题已经解决了,但是这不是最好的解决方案。...中指定索引名,假如数据库中的索引名发生变更,还需去更改SQL。
在进行jdbc操作时,出现了如下图的bug: 错误原因:在执行sql语句后,进行遍历,但是取值与数据库中的列名不一致。...主要是因为字段名错误,如下,本来应该从数据库中取emp表中的realName字段的数据,却取成了reaName字段的数据,导致出现列名无效的问题 ps:一定要认真!!! last ps:
,所以报错,而且这个行为和Oracle是一致的。...: not a valid numberSQL> select * from dual where 1 in ('1'); DUMMY-----------------X 1 row fetched.Oracle...*ERROR at line 1:ORA-01722: invalid number SQL> select * from dual where 1 in ('1,2');select * from...dual where 1 in ('1,2') *ERROR at line 1:ORA-01722: invalid number SQL...,可参考csdn的这篇技术文档:blog.csdn.net/thekenofDIS…比较好的做法是尽量避免mysql隐式转换的这种行为,应该数字和数字进行等值运算,字符串和字符串进行等值运算,尽量不要数字和字符串进行等值运算
(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语句时,违反了约束规定等等。
nested exception is java.sql.SQLSyntaxErrorException: ORA-01722: invalid number 问题 ORA-01722: invalid
在使用MyBatis操作Oracle数据库的时候,写模糊查询突然发现原本在MySql中正确的代码,在Oracle中报错,参数个数无效 Oracle的CONCAT函数不像MySql那样支持三个参数的拼接,需要把SQL语句修正为: and e.empId like CONCAT(CONCAT('%',#{empId}...),'%') 或者 and e.empId like '%' || #{empId} ||'%'; 以上仅对Oracle有效!
定义 无效搜索:如果用户下一次搜索内容中包含本次搜索内容,则认为本次搜索为无效搜索。...请查询用户无效搜索记录 样例数据 +---------+---------------------+------------------------+ | user_id | search_time...3.SQL step1:查询出下一行数据,并把下一行搜索内容作为新字段放到本行 select user_id, search_time, search_content, lead(search_content
7.对于有连接的列“||”,最后一个连接列索引会无效。尽量避免连接,可以分开连接或者使用不作用在列上的函数替代。...不同区域出现的相同的Sql语句,要保证查询字符完全相同,以利用SGA共享池,防止相同的Sql语句被多次分析。 多利用内部函数提高Sql效率。...需要注意的是,随着Oracle的升级,查询优化器会自动对Sql语句进行优化,某些限制可能在新版本的Oracle下不再是问题。...优化器 1.Oracle优化器(Optimizer)是Oracle在执行SQL之前分析语句的工具。...对列和索引更新统计信息的SQL: SQL> ANALYZE TABLE table_name COMPUTE STATISTICS; SQL> ANALYZE INDEX index_name ESTIMATE
我遇到的这个错误是sql在表连接的时候类型不匹配 select * from a LEFT JOIN SDH5.T_BUSINESS_PRODUCT_CONFIG E ON
但是PHPCMS升级到V9后,把2008的很多功能都去掉了,比如get标签中,在后面自动添加了一个LIMIT 0,20,这样你即使写了num=’数字’也没用,写在SQL语句里面,例如 {pc:get sql...news ORDER BY id DESC LIMIT 2,5" cache="3600" page="$page" dbsource="discuz" return="data"} 就会报错,打印出来的SQL...在论坛上发现了2个方法 1.最常用 {pc:get sql="SELECT title,url FROM v9_news where catid=9 and status=99 order by updatetime...2.注释法 {pc:get sql="SELECT title,url FROM v9_news where catid=9 and status=99 order by updatetime desc
今天看到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; +------
碰巧看到一篇文章提到了Oracle的greatest函数,相对应的有个least,以为这俩是个新的函数,但是看了下官方文档,其实在11g的《SQL Language Reference》,就提到了他们,...Oracle Database uses the first expr to determine the return type....Oracle Database uses the first expr to determine the return type....name2) from t_compare; G - c D number和varchar2类型混合比较时,如果number在前,返回的是number类型,此时name1和name2是字母,不能转换成数字...from t_compare * ERROR at line 1: ORA-01722: invalid number 如果name1和name2是能转换成数字的值
减少访问数据库的次数: ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等; (5) 在SQL*Plus , SQL*Forms...效率.: 复杂的SQL往往牺牲了执行效率....当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 同样在联结多个表时使用索引也可以提高效率....语句用大写的;因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行 (20) 在java代码中尽量少用连接符“+”连接字符串!...为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来.
领取专属 10元无门槛券
手把手带您无忧上云