2015-06-21 53 views
0

我不是Oracle的专家,只是开始解决问题。当我执行以下查询时,它使我输出|(管道)格式。我想EXPLAIN PLAN输出在tabluarjsonxml,等等......这可能吗?在Oracle中解释计划输出

EXPLAIN PLAN FOR SELECT * FROM user_master; 
SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('plan_table')); 

Output: 

    Plan hash value: 3060894046 

    --------------------------------------------------------------------------------- 
    | Id | Operation   | Name  | Rows | Bytes | Cost (%CPU)| Time  | 
    --------------------------------------------------------------------------------- 
    | 0 | SELECT STATEMENT |    |  1 | 94 |  2 (0)| 00:00:01 | 
    | 1 | TABLE ACCESS FULL| USER_MASTER |  1 | 94 |  2 (0)| 00:00:01 | 
    --------------------------------------------------------------------------------- 
+0

当你使用像蟾蜍,他们为您提供了解释计划数显示选项的IDE。也许这对你来说是一种选择。 –

+0

如果在运行EXPLAIN PALN之前在sqlplus中发出“SET MARKUP ON”,会发生什么情况?通常这会将查询结果呈现为HTML,因此可能值得一试。 – TenG

+0

您可能最适合使用文本格式。它有大部分有用的信息,并经常用于印刷资料。当人们在这里张贴解释计划的图形表示时,他们通常会忽略重要信息,或者比较难以比较计划。 –

回答

2

你可以得到它以表格的形式,如果你直接访问PLAN_TABLE

select plan_id, 
     operation, 
     options, 
     cost, 
     cpu_cost, 
     io_cost, 
     temp_space, 
     access_predicates, 
     bytes, 
     object_name, 
     object_alias, 
     optimizer, 
     object_type 
from plan_table 
start with parent_id is null 
connect by prior id = parent_id; 

由于PLAN_TABLE可以包含不同的计划,它可能会更好使用显式声明ID:

explain plan 
    set statement_id = 'foo' 
for 
select ...; 

然后用它在plan_table上选择:

select .... 
from plan_table 
start with parent_id is null and statement_id = 'foo' 
connect by prior id = parent_id; 

为了得到这个为XML,你可以使用:

select dbms_xplan.display_plan(type => 'xml') 
FROM dual