ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 这条语句简直匪夷所思啊

这条语句简直匪夷所思啊

原创 Linux操作系统 作者:wei-xh 时间:2010-05-31 21:45:55 0 删除 编辑
说明:1)表ac01不含有字段aab001,单独执行报错。
SQL> select aab001 from ac01 where aac003='朱剑';
select aab001 from ac01
       *
第 1 行出现错误:
ORA-00904: "AAB001": invalid identifier
已用时间:  00: 00: 00.03


可是如果按照如下写,竟然能查询出数据来。
select * from ab01 where aab001 in ( select aab001 from ac01 where aac003='朱剑');
输出略。。。。。

下面是执行计划:
SQL> explain plan for select * from ab01 where aab001 in ( select aab001 from ac01 where aac003='朱剑');

已解释。

已用时间:  00: 00: 00.12
SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------
--------
Plan hash value: 1162673798

--------------------------------------------------------------------------------------
| Id  | Operation          | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |                 |     1 |   163 | 72264   (1)| 00:14:28 |
|*  1 |  FILTER            |                 |       |       |            |          |
|   2 |   TABLE ACCESS FULL| AB01            | 33370 |  5311K|   198   (3)| 00:00:03 |
|*  3 |   FILTER           |                 |       |       |            |          |
|*  4 |    INDEX RANGE SCAN| IDX_AC01_AAC003 |     2 |    14 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter( EXISTS (SELECT /*+ */ 0 FROM "AC01" "AC01" WHERE :B1=:B2 AND
              "AAC003"='朱剑'))
   3 - filter(:B1=:B2)
   4 - access("AAC003"='朱剑')

已选择19行。

已用时间:  00: 00: 00.55


这是为何呢?貌似从执行计划的谓词部分能看出,ORACLE做了EXISTS转换。可是还是觉得这个是不是ORACLE的一个BUG.

SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for HPUX: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
已用时间:  00: 00: 00.03


[ 本帖最后由 wei-xh 于 2010-5-31 21:22 编辑 ]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22034023/viewspace-664131/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2425309