Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1201474
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2008-01-06 21:29:19

create table test_num(a varchar2(10),b varchar2(10));
insert into test_num values('a','b');
select * from test_num where a=1;

ORA-01722: invalid number
select * from test_num where a='1';
no rows selected

同时需要注意,"invalid number"的产生还依赖于执行计划,如下:

SQL> create table tbl(x varchar2(1),y varchar2(1));

 

Table created.

 

SQL> insert into tbl values('A','X');

 

1 row created.

 

SQL> insert into tbl values('B','1');

 

1 row created.

 

SQL> commit;

 

Commit complete.

 

SQL> select /*+ ordered_predicates */ * from tbl where y = 1 and x = 'B';
select /*+ ordered_predicates */ * from tbl where y = 1 and x = 'B'
                                                  *
ERROR at line 1:
ORA-01722: invalid number

 

SQL> select /*+ ordered_predicates */ * from tbl where x = 'B' and y = 1;

 

X                                                            Y
------------------------------------------------------------ -
B                                                            1

还是一个教训,做你该做的,不要依赖于Oracle会那么聪明。

阅读(3809) | 评论(2) | 转发(0) |
0

上一篇:PLSQL程序调优系列九

下一篇:ORA-02019

给主人留下些什么吧!~~

aqcjsy12008-04-17 00:26:41

再看下http://blog.chinaunix.net/u1/57759/showart_545146.html,这个估计不是很容易猜得到

chinaunix网友2008-04-16 17:36:36

那是因为你的Y是以字符型插进去的,所以你Y=1是会报错的,但如果你是Y='1',你看还报错吗?而第二个where 语句执行成功是因为 X = 'B'匹配成功了