怪问题 ORA-01722: invalid number,麻烦大家分析下

[复制链接]
查看11 | 回复2 | 2014-6-13 15:55:46 | 显示全部楼层 |阅读模式
执行同样的语句在第一个数据库 ( 11.2.0.1.0 )报错ORA-01722: invalid number,第二个数据库执行成功(11.2.0.2.0)
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
SQL> SELECT GW.GW_DM, GW.GW_MCFROM ADP.QX_GW GW, ADP.QX_USER_GW U
2 WHERE GW.GW_DM = U.GW_DM AND gw.gw_mc LIKE '%管理%'AND U.USERID = 1233960112;
ERROR:
ORA-01722: invalid number

no rows selected

Execution Plan
----------------------------------------------------------
Plan hash value: 3896149506
-------------------------------------------------------------------------------------------
| Id| Operation
| Name | Rows| Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT
|
| 1 |68 |12 (0)| 00:00:01 |
| 1 |NESTED LOOPS
|
| | |
|
|
| 2 | NESTED LOOPS
|
| 1 |68 |12 (0)| 00:00:01 |
|*3 |TABLE ACCESS FULL | QX_USER_GW | 2 |56 |10 (0)| 00:00:01 |
|*4 |INDEX UNIQUE SCAN | PK_QX_GW | 1 | | 0 (0)| 00:00:01 |
|*5 | TABLE ACCESS BY INDEX ROWID| QX_GW| 1 |40 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - filter(TO_NUMBER("U"."USERID")=24403960112)
4 - access("GW"."GW_DM"="U"."GW_DM")
5 - filter("GW"."GW_MC" LIKE '%管理%')

Statistics
----------------------------------------------------------

4recursive calls

6db block gets
30consistent gets

0physical reads

0redo size
627bytes sent via SQL*Net to client
520bytes received via SQL*Net from client

2SQL*Net roundtrips to/from client

0sorts (memory)

0sorts (disk)

0rows processed
SQL>

===================================================
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> SELECT GW.GW_DM, GW.GW_MCFROM ADP.QX_GW GW, ADP.QX_USER_GW U
2 WHERE GW.GW_DM = U.GW_DM AND gw.gw_mc LIKE '%科管理岗'AND U.USERID = 1233960112;
GW_DM
GW_MC
---------------- --------------------------------------------------------------------------------
12341241230002管理九科管理岗

Execution Plan
----------------------------------------------------------
Plan hash value: 1446211536
-------------------------------------------------------------------------------------------
| Id| Operation
| Name | Rows| Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT
|
| 1 |70 |24 (0)| 00:00:01 |
| 1 |NESTED LOOPS
|
| | |
|
|
| 2 | NESTED LOOPS
|
| 1 |70 |24 (0)| 00:00:01 |
|*3 |TABLE ACCESS FULL | QX_USER_GW | 3 |84 |21 (0)| 00:00:01 |
|*4 |INDEX UNIQUE SCAN | PK_QX_GW | 1 | | 0 (0)| 00:00:01 |
|*5 | TABLE ACCESS BY INDEX ROWID| QX_GW| 1 |42 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - filter(TO_NUMBER("U"."USERID")=24403960112)
4 - access("GW"."GW_DM"="U"."GW_DM")
5 - filter("GW"."GW_MC" LIKE '%科管理岗')

Statistics
----------------------------------------------------------

0recursive calls

0db block gets
76consistent gets
65physical reads

0redo size
626bytes sent via SQL*Net to client
520bytes received via SQL*Net from client

2SQL*Net roundtrips to/from client

0sorts (memory)

0sorts (disk)

1rows processed
SQL>

回复

使用道具 举报

千问 | 2014-6-13 15:55:46 | 显示全部楼层
1、U.USERID中可能存在非数字值。
2、两条语句的代码不相同(LIKE条件不同)
3、疑问:条件为 “U.USERID = 1233960112”,但为何在执行计划中却显示为“3 - filter(TO_NUMBER("U"."USERID")=24403960112)”
回复

使用道具 举报

千问 | 2014-6-13 15:55:46 | 显示全部楼层
已找到答案,原因为字段类型隐形转换造成的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行