楼主: viadeazhu

[精华] CBO hint:no_unnest,push_subq,push_pred的用法

[复制链接]
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
21#
发表于 2010-6-1 11:47 | 只看该作者
SQL>    select
  2   *
  3    from test_1
  4   where object_id not in
  5         (select /*+  NO_SWAP_JOIN_INPUTS(TEST_2) */ object_id from test_2 where object_id is not null)
  6     and object_id is not null;

Execution Plan
----------------------------------------------------------

------------------------------------------------------------------
| Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)|
------------------------------------------------------------------
|   0 | SELECT STATEMENT   |        |    20 |  3460 |    31   (4)|
|   1 |  HASH JOIN ANTI    |        |    20 |  3460 |    31   (4)|
|   2 |   TABLE ACCESS FULL| TEST_1 |  4423 |   691K|    15   (0)|
|   3 |   TABLE ACCESS FULL| TEST_2 |  4424 | 57512 |    15   (0)|
------------------------------------------------------------------

Note
-----
   - 'PLAN_TABLE' is old version

SQL>   select
  2   *
  3    from test_1
  4   where object_id not in
  5         (select /* +  NO_SWAP_JOIN_INPUTS(TEST_2) */ object_id from test_2 where object_id is not null)
  6     and object_id is not null;

Execution Plan
----------------------------------------------------------

--------------------------------------------------------------------
| Id  | Operation            | Name   | Rows  | Bytes | Cost (%CPU)|
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |        |    20 |  3460 |    31   (4)|
|   1 |  HASH JOIN RIGHT ANTI|        |    20 |  3460 |    31   (4)|
|   2 |   TABLE ACCESS FULL  | TEST_2 |  4424 | 57512 |    15   (0)|
|   3 |   TABLE ACCESS FULL  | TEST_1 |  4423 |   691K|    15   (0)|
--------------------------------------------------------------------

Note
-----
   - 'PLAN_TABLE' is old version

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
22#
发表于 2010-6-1 11:52 | 只看该作者
原帖由 棉花糖ONE 于 2010-6-1 11:47 发表
SQL>    select
  2   *
  3    from test_1
  4   where object_id not in
  5         (select /*+  NO_SWAP_JOIN_INPUTS(TEST_2) */ object_id from test_2 where object_id is not null)
  6     and object_id is not null;

Execution Plan
----------------------------------------------------------

------------------------------------------------------------------
| Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)|
------------------------------------------------------------------
|   0 | SELECT STATEMENT   |        |    20 |  3460 |    31   (4)|
|   1 |  HASH JOIN ANTI    |        |    20 |  3460 |    31   (4)|
|   2 |   TABLE ACCESS FULL| TEST_1 |  4423 |   691K|    15   (0)|
|   3 |   TABLE ACCESS FULL| TEST_2 |  4424 | 57512 |    15   (0)|
------------------------------------------------------------------

Note
-----
   - 'PLAN_TABLE' is old version

SQL>   select
  2   *
  3    from test_1
  4   where object_id not in
  5         (select /* +  NO_SWAP_JOIN_INPUTS(TEST_2) */ object_id from test_2 where object_id is not null)
  6     and object_id is not null;

Execution Plan
----------------------------------------------------------

--------------------------------------------------------------------
| Id  | Operation            | Name   | Rows  | Bytes | Cost (%CPU)|
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |        |    20 |  3460 |    31   (4)|
|   1 |  HASH JOIN RIGHT ANTI|        |    20 |  3460 |    31   (4)|
|   2 |   TABLE ACCESS FULL  | TEST_2 |  4424 | 57512 |    15   (0)|
|   3 |   TABLE ACCESS FULL  | TEST_1 |  4423 |   691K|    15   (0)|
--------------------------------------------------------------------

Note
-----
   - 'PLAN_TABLE' is old version


棉花,我用过,没用,主要是你没发给VW_NSO_1命名~ 就算你用NO_SWAP_JOIN_INPUTS(@subq1) + /*+QB_Name(@subq1)*/ 也没用~

使用道具 举报

回复
论坛徽章:
113
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:42:50现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36蛋疼蛋
日期:2011-07-24 22:25:332012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25
23#
 楼主| 发表于 2010-6-1 11:58 | 只看该作者

回复 #22 zergduan 的帖子

zerg,你是说控制子查询 和 t1,t2 hash join出来的结果的连接顺序?

使用道具 举报

回复
论坛徽章:
113
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:42:50现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36蛋疼蛋
日期:2011-07-24 22:25:332012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25
24#
 楼主| 发表于 2010-6-1 12:21 | 只看该作者
如果没有group by字样,用swap join是没问题的。但是加上了group by,使得子查询成为unmergeable view, swap join的hint貌似就无效了。

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
25#
发表于 2010-6-1 12:48 | 只看该作者
原帖由 viadeazhu 于 2010-6-1 12:21 发表
如果没有group by字样,用swap join是没问题的。但是加上了group by,使得子查询成为unmergeable view, swap join的hint貌似就无效了。

:)
无论是想控制 t3内键出来的view和t1的连接顺序 ( leading,ordered)
还是控制t3 内建出来的view和T1,T2结果集的连接顺序(swap_join)
似乎都没法实现...

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
26#
发表于 2010-6-1 12:53 | 只看该作者
比如说

MYDB@MYDB10G >select  *
  2    from t1, t2
  3   where t1.object_id = t2.object_id
  4     and t1.data_object_id<100
  5     and t1.object_id is not null
  6     and t1.object_id not in (select t3.object_id
  7                                from t3
  8                               where t3.object_id is not null
  9                               group by object_id, object_name
10                              having count(*) > 0)
11  /
已用时间:  00: 00: 00.00

执行计划
----------------------------------------------------------
Plan hash value: 2554849999

-----------------------------------------------------------------------------------
| Id  | Operation              | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |    10 |  1830 |    98   (4)| 00:00:02 |
|*  1 |  HASH JOIN             |          |    10 |  1830 |    98   (4)| 00:00:02 |
|*  2 |   HASH JOIN ANTI       |          |    10 |   980 |    52   (4)| 00:00:01 |
|*  3 |    TABLE ACCESS FULL   | T1       |    15 |  1275 |    46   (0)| 00:00:01 |
|   4 |    VIEW                | VW_NSO_1 |    16 |   208 |     5  (20)| 00:00:01 |
|*  5 |     FILTER             |          |       |       |            |          |
|   6 |      HASH GROUP BY     |          |    16 |   208 |     5  (20)| 00:00:01 |
|*  7 |       TABLE ACCESS FULL| T3       |   304 |  3952 |     4   (0)| 00:00:01 |
|   8 |   TABLE ACCESS FULL    | T2       | 11654 |   967K|    45   (0)| 00:00:01 |
-----------------------------------------------------------------------------------

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

   1 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")
   2 - access("T1"."OBJECT_ID"="$nso_col_1")
   3 - filter("T1"."DATA_OBJECT_ID"<100 AND "T1"."OBJECT_ID" IS NOT NULL)
   5 - filter(COUNT(*)>0)
   7 - filter("T3"."OBJECT_ID" IS NOT NULL)

MYDB@MYDB10G >select  *
  2    from t1, t2
  3   where t1.object_id = t2.object_id
  4     and t1.data_object_id<1000
  5     and t1.object_id is not null
  6     and t1.object_id not in (select t3.object_id
  7                                from t3
  8                               where t3.object_id is not null
  9                               group by object_id, object_name
10                              having count(*) > 0)
11  /
已用时间:  00: 00: 00.00

执行计划
----------------------------------------------------------
Plan hash value: 523363264

-----------------------------------------------------------------------------------
| Id  | Operation              | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |   140 | 25620 |    98   (4)| 00:00:02 |
|*  1 |  HASH JOIN             |          |   140 | 25620 |    98   (4)| 00:00:02 |
|*  2 |   HASH JOIN RIGHT ANTI |          |   140 | 13720 |    52   (4)| 00:00:01 |
|   3 |    VIEW                | VW_NSO_1 |    16 |   208 |     5  (20)| 00:00:01 |
|*  4 |     FILTER             |          |       |       |            |          |
|   5 |      HASH GROUP BY     |          |    16 |   208 |     5  (20)| 00:00:01 |
|*  6 |       TABLE ACCESS FULL| T3       |   304 |  3952 |     4   (0)| 00:00:01 |
|*  7 |    TABLE ACCESS FULL   | T1       |   156 | 13260 |    46   (0)| 00:00:01 |
|   8 |   TABLE ACCESS FULL    | T2       | 11654 |   967K|    45   (0)| 00:00:01 |
-----------------------------------------------------------------------------------

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

   1 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")
   2 - access("T1"."OBJECT_ID"="$nso_col_1")
   4 - filter(COUNT(*)>0)
   6 - filter("T3"."OBJECT_ID" IS NOT NULL)
   7 - filter("T1"."DATA_OBJECT_ID"<1000 AND "T1"."OBJECT_ID" IS NOT NULL)


可以看到对于不同的,T1的结果集,使用了不同的连接方式 hash join right anti 和hash join anti,区别就是驱动表不一样,这个怎么控制?

[ 本帖最后由 zergduan 于 2010-6-1 12:55 编辑 ]

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
27#
发表于 2010-6-1 12:59 | 只看该作者
因为查询转换后,not in的语句块产生的新的语句块,不受qb_name的控制,是一个新的query block name,所以你的hint无效


SQL> set autot trace exp
SQL>  select  *
  2     from test_1
  3    where object_id not in (select /*+ NO_SWAP_JOIN_INPUTS(@"SEL$5DA710D3" "VW_NSO_1"@"SEL$5DA710D3") */
  4                             object_id
  5                              from test_2 t
  6                             where object_id is not null
  7                             group by object_id
  8                            having count(*) = 1)
  9      and object_id is not null;

Execution Plan
----------------------------------------------------------

-----------------------------------------------------------------------
| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)|
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |    10 |  1730 |    32   (7)|
|   1 |  HASH JOIN ANTI       |          |    10 |  1730 |    32   (7)|
|   2 |   TABLE ACCESS FULL   | TEST_1   |  4423 |   691K|    15   (0)|
|   3 |   VIEW                | VW_NSO_1 |  4424 | 57512 |    16   (7)|
|   4 |    FILTER             |          |       |       |            |
|   5 |     HASH GROUP BY     |          |  4424 | 57512 |    16   (7)|
|   6 |      TABLE ACCESS FULL| TEST_2   |  4424 | 57512 |    15   (0)|
-----------------------------------------------------------------------

Note
-----
   - 'PLAN_TABLE' is old version

SQL>  select  *
  2     from test_1
  3    where object_id not in (select /* + NO_SWAP_JOIN_INPUTS(@"SEL$5DA710D3" "VW_NSO_1"@"SEL$5DA710D3") */
  4                             object_id
  5                              from test_2 t
  6                             where object_id is not null
  7                             group by object_id
  8                            having count(*) = 1)
  9      and object_id is not null;

Execution Plan
----------------------------------------------------------

-----------------------------------------------------------------------
| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)|
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |    10 |  1730 |    32   (7)|
|   1 |  HASH JOIN RIGHT ANTI |          |    10 |  1730 |    32   (7)|
|   2 |   VIEW                | VW_NSO_1 |  4424 | 57512 |    16   (7)|
|   3 |    FILTER             |          |       |       |            |
|   4 |     HASH GROUP BY     |          |  4424 | 57512 |    16   (7)|
|   5 |      TABLE ACCESS FULL| TEST_2   |  4424 | 57512 |    15   (0)|
|   6 |   TABLE ACCESS FULL   | TEST_1   |  4423 |   691K|    15   (0)|
-----------------------------------------------------------------------

Note
-----
   - 'PLAN_TABLE' is old version

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
28#
发表于 2010-6-1 13:01 | 只看该作者
MYDB@MYDB10G >select  *
  2    from t1, t2
  3   where t1.object_id = t2.object_id
  4     and t1.data_object_id<100
  5     and t1.object_id is not null
  6     and t1.object_id not in (select t3.object_id
  7                                from t3
  8                               where t3.object_id is not null
  9                               group by object_id, object_name
10                              having count(*) > 0)
11  /
已用时间:  00: 00: 00.00

执行计划
----------------------------------------------------------
Plan hash value: 2554849999

-----------------------------------------------------------------------------------
| Id  | Operation              | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |    10 |  1830 |    98   (4)| 00:00:02 |
|*  1 |  HASH JOIN             |          |    10 |  1830 |    98   (4)| 00:00:02 |
|*  2 |   HASH JOIN ANTI       |          |    10 |   980 |    52   (4)| 00:00:01 |
|*  3 |    TABLE ACCESS FULL   | T1       |    15 |  1275 |    46   (0)| 00:00:01 |
|   4 |    VIEW                | VW_NSO_1 |    16 |   208 |     5  (20)| 00:00:01 |
|*  5 |     FILTER             |          |       |       |            |          |
|   6 |      HASH GROUP BY     |          |    16 |   208 |     5  (20)| 00:00:01 |
|*  7 |       TABLE ACCESS FULL| T3       |   304 |  3952 |     4   (0)| 00:00:01 |
|   8 |   TABLE ACCESS FULL    | T2       | 11654 |   967K|    45   (0)| 00:00:01 |
-----------------------------------------------------------------------------------

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

   1 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")
   2 - access("T1"."OBJECT_ID"="$nso_col_1")
   3 - filter("T1"."DATA_OBJECT_ID"<100 AND "T1"."OBJECT_ID" IS NOT NULL)
   5 - filter(COUNT(*)>0)
   7 - filter("T3"."OBJECT_ID" IS NOT NULL)

怎么才能让这个sql,以VW_NSO_1作为驱动表和T1做hash right anti join呢?

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
29#
发表于 2010-6-1 13:02 | 只看该作者
原帖由 棉花糖ONE 于 2010-6-1 12:59 发表
因为查询转换后,not in的语句块产生的新的语句块,不受qb_name的控制,是一个新的query block name,所以你的hint无效


SQL> set autot trace exp
SQL>  select  *
  2     from test_1
  3    where object_id not in (select /*+ NO_SWAP_JOIN_INPUTS(@"SEL$5DA710D3" "VW_NSO_1"@"SEL$5DA710D3" */
  4                             object_id
  5                              from test_2 t
  6                             where object_id is not null
  7                             group by object_id
  8                            having count(*) = 1)
  9      and object_id is not null;

Execution Plan
----------------------------------------------------------

-----------------------------------------------------------------------
| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)|
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |    10 |  1730 |    32   (7)|
|   1 |  HASH JOIN ANTI       |          |    10 |  1730 |    32   (7)|
|   2 |   TABLE ACCESS FULL   | TEST_1   |  4423 |   691K|    15   (0)|
|   3 |   VIEW                | VW_NSO_1 |  4424 | 57512 |    16   (7)|
|   4 |    FILTER             |          |       |       |            |
|   5 |     HASH GROUP BY     |          |  4424 | 57512 |    16   (7)|
|   6 |      TABLE ACCESS FULL| TEST_2   |  4424 | 57512 |    15   (0)|
-----------------------------------------------------------------------

Note
-----
   - 'PLAN_TABLE' is old version

SQL>  select  *
  2     from test_1
  3    where object_id not in (select /* + NO_SWAP_JOIN_INPUTS(@"SEL$5DA710D3" "VW_NSO_1"@"SEL$5DA710D3" */
  4                             object_id
  5                              from test_2 t
  6                             where object_id is not null
  7                             group by object_id
  8                            having count(*) = 1)
  9      and object_id is not null;

Execution Plan
----------------------------------------------------------

-----------------------------------------------------------------------
| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)|
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |    10 |  1730 |    32   (7)|
|   1 |  HASH JOIN RIGHT ANTI |          |    10 |  1730 |    32   (7)|
|   2 |   VIEW                | VW_NSO_1 |  4424 | 57512 |    16   (7)|
|   3 |    FILTER             |          |       |       |            |
|   4 |     HASH GROUP BY     |          |  4424 | 57512 |    16   (7)|
|   5 |      TABLE ACCESS FULL| TEST_2   |  4424 | 57512 |    15   (0)|
|   6 |   TABLE ACCESS FULL   | TEST_1   |  4423 |   691K|    15   (0)|
-----------------------------------------------------------------------

Note
-----
   - 'PLAN_TABLE' is old version


明白了~ 非常感谢!

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
30#
发表于 2010-6-1 13:05 | 只看该作者

MYDB@MYDB10G >explain plan for
  2  select *
  3    from t1, t2
  4   where t1.object_id = t2.object_id
  5     and t1.data_object_id<100
  6     and t1.object_id is not null
  7     and t1.object_id not in (select t3.object_id
  8                                from t3
  9                               where t3.object_id is not null
10                               group by object_id, object_name
11                              having count(*) > 0)
12  /

已解释。

已用时间:  00: 00: 00.18
MYDB@MYDB10G >select * from table(dbms_xplan.display(null,null,'advanced'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2554849999

-----------------------------------------------------------------------------------
| Id  | Operation              | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |    10 |  1830 |    98   (4)| 00:00:02 |
|*  1 |  HASH JOIN             |          |    10 |  1830 |    98   (4)| 00:00:02 |
|*  2 |   HASH JOIN ANTI       |          |    10 |   980 |    52   (4)| 00:00:01 |
|*  3 |    TABLE ACCESS FULL   | T1       |    15 |  1275 |    46   (0)| 00:00:01 |
|   4 |    VIEW                | VW_NSO_1 |    16 |   208 |     5  (20)| 00:00:01 |
|*  5 |     FILTER             |          |       |       |            |          |
|   6 |      HASH GROUP BY     |          |    16 |   208 |     5  (20)| 00:00:01 |
|*  7 |       TABLE ACCESS FULL| T3       |   304 |  3952 |     4   (0)| 00:00:01 |
|   8 |   TABLE ACCESS FULL    | T2       | 11654 |   967K|    45   (0)| 00:00:01 |
-----------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$5DA710D3
   3 - SEL$5DA710D3 / T1@SEL$1
   4 - SEL$683B0107 / VW_NSO_1@SEL$5DA710D3
   5 - SEL$683B0107
   7 - SEL$683B0107 / T3@SEL$2
   8 - SEL$5DA710D3 / T2@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      FULL(@"SEL$683B0107" "T3"@"SEL$2")
      USE_HASH(@"SEL$5DA710D3" "T2"@"SEL$1")
      USE_HASH(@"SEL$5DA710D3" "VW_NSO_1"@"SEL$5DA710D3")
      LEADING(@"SEL$5DA710D3" "T1"@"SEL$1" "VW_NSO_1"@"SEL$5DA710D3"
              "T2"@"SEL$1")
      FULL(@"SEL$5DA710D3" "T2"@"SEL$1")
      NO_ACCESS(@"SEL$5DA710D3" "VW_NSO_1"@"SEL$5DA710D3")
      FULL(@"SEL$5DA710D3" "T1"@"SEL$1")
      OUTLINE(@"SEL$1")
      OUTLINE(@"SEL$2")
      UNNEST(@"SEL$2")
      OUTLINE_LEAF(@"SEL$5DA710D3")
      OUTLINE_LEAF(@"SEL$683B0107")
      ALL_ROWS
      OPTIMIZER_FEATURES_ENABLE('10.2.0.4')
      IGNORE_OPTIM_××DED_HINTS
      END_OUTLINE_DATA
  */

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

   1 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")
   2 - access("T1"."OBJECT_ID"="$nso_col_1")
   3 - filter("T1"."DATA_OBJECT_ID"<100 AND "T1"."OBJECT_ID" IS NOT NULL)
   5 - filter(COUNT(*)>0)
   7 - filter("T3"."OBJECT_ID" IS NOT NULL)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - (#keys=1) "T1"."OBJECT_ID"[NUMBER,22], "T2"."OBJECT_ID"[NUMBER,22],
       "T1"."GENERATED"[VARCHAR2,1], "T1"."OWNER"[VARCHAR2,30],
       "T1"."OBJECT_NAME"[VARCHAR2,128], "T1"."SUBOBJECT_NAME"[VARCHAR2,30],
       "T1"."SECONDARY"[VARCHAR2,1], "T1"."DATA_OBJECT_ID"[NUMBER,22],
       "T1"."OBJECT_TYPE"[VARCHAR2,19], "T1"."CREATED"[DATE,7],
       "T1"."LAST_DDL_TIME"[DATE,7], "T1"."TIMESTAMP"[VARCHAR2,19],
       "T1"."STATUS"[VARCHAR2,7], "T1"."TEMPORARY"[VARCHAR2,1],
       "T2"."OWNER"[VARCHAR2,30], "T2"."OBJECT_NAME"[VARCHAR2,30],
       "T2"."SUBOBJECT_NAME"[VARCHAR2,30], "T2"."SECONDARY"[VARCHAR2,1],
       "T2"."DATA_OBJECT_ID"[NUMBER,22], "T2"."OBJECT_TYPE"[VARCHAR2,19],
       "T2"."CREATED"[DATE,7], "T2"."LAST_DDL_TIME"[DATE,7],
       "T2"."TIMESTAMP"[VARCHAR2,19], "T2"."STATUS"[VARCHAR2,7],
       "T2"."TEMPORARY"[VARCHAR2,1], "T2"."GENERATED"[VARCHAR2,1]
   2 - (#keys=1) "T1"."OBJECT_ID"[NUMBER,22], "T1"."OWNER"[VARCHAR2,30],
       "T1"."OBJECT_NAME"[VARCHAR2,128], "T1"."SUBOBJECT_NAME"[VARCHAR2,30],
       "T1"."SECONDARY"[VARCHAR2,1], "T1"."DATA_OBJECT_ID"[NUMBER,22],
       "T1"."OBJECT_TYPE"[VARCHAR2,19], "T1"."CREATED"[DATE,7],
       "T1"."LAST_DDL_TIME"[DATE,7], "T1"."TIMESTAMP"[VARCHAR2,19],
       "T1"."STATUS"[VARCHAR2,7], "T1"."TEMPORARY"[VARCHAR2,1],
       "T1"."GENERATED"[VARCHAR2,1]
   3 - "T1"."OWNER"[VARCHAR2,30], "T1"."OBJECT_NAME"[VARCHAR2,128],
       "T1"."SUBOBJECT_NAME"[VARCHAR2,30], "T1"."OBJECT_ID"[NUMBER,22],
       "T1"."DATA_OBJECT_ID"[NUMBER,22], "T1"."OBJECT_TYPE"[VARCHAR2,19],
       "T1"."CREATED"[DATE,7], "T1"."LAST_DDL_TIME"[DATE,7],
       "T1"."TIMESTAMP"[VARCHAR2,19], "T1"."STATUS"[VARCHAR2,7],
       "T1"."TEMPORARY"[VARCHAR2,1], "T1"."GENERATED"[VARCHAR2,1],
       "T1"."SECONDARY"[VARCHAR2,1]
   4 - "$nso_col_1"[NUMBER,22]
   5 - "OBJECT_ID"[NUMBER,22]
   6 - (#keys=2) "OBJECT_ID"[NUMBER,22], "OBJECT_NAME"[VARCHAR2,128],
       COUNT(*)[22]
   7 - "OBJECT_NAME"[VARCHAR2,128], "OBJECT_ID"[NUMBER,22]
   8 - "T2"."OWNER"[VARCHAR2,30], "T2"."OBJECT_NAME"[VARCHAR2,30],
       "T2"."SUBOBJECT_NAME"[VARCHAR2,30], "T2"."OBJECT_ID"[NUMBER,22],
       "T2"."DATA_OBJECT_ID"[NUMBER,22], "T2"."OBJECT_TYPE"[VARCHAR2,19],
       "T2"."CREATED"[DATE,7], "T2"."LAST_DDL_TIME"[DATE,7],
       "T2"."TIMESTAMP"[VARCHAR2,19], "T2"."STATUS"[VARCHAR2,7],
       "T2"."TEMPORARY"[VARCHAR2,1], "T2"."GENERATED"[VARCHAR2,1],
       "T2"."SECONDARY"[VARCHAR2,1]

已选择101行。



关键是子查询的名字,只要用这个就可以了

[ 本帖最后由 zergduan 于 2010-6-1 13:10 编辑 ]

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表