2013-03-01 65 views
2

我想知道是否有任何库允许将oracle解释计划解析为数据结构。Java解析Oracle解释计划

考虑以下查询:

select prod_category, avg(amount_sold) 
from sales s, products p 
where p.prod_id = s.prod_id 
group by prod_category; 

解释计划可能看起来像下面这样:

------------------------------------------ 
    Id Operation    Name 
------------------------------------------ 
    0 SELECT STATEMENT    
    1 HASH GROUP BY     
    2 HASH JOIN     
    3  TABLE ACCESS FULL PRODUCTS 
    4  PARTITION RANGE ALL   
    5  TABLE ACCESS FULL SALES 
------------------------------------------ 

我想它解析计划到数据结构,使可视化和分析的分析器计划如下:

SELECT STATEMENT 
     | 
    GROUP BY 
     | 
     JOIN 
    _____|______ 
    |   | 
ACCESS  ACCESS 
(PRODUCTS) (SALES) 

我注意到Oracle的' s SQLDeveloper可视化计划。我不愿手动解析文本,所以我想知道是否有任何库可以帮助解析计划。

+1

我想你可以使用JDBC请求XML中的解释计划 – 2013-03-01 10:02:55

回答

3

计划已经被存储为方便的可视化层次结构:

select 
    id, 
    parent_id, 
    lpad(' ', 2*(level-1), ' ')||operation||' '||object_name as desc 
    from your_plan_table 
    start with parent_id is null 
    connect by prior id = parent_id 

如何这种结构可以更加方便?

+1

是的,它只是一个标准的父 - 子自引用结构。在Rails中,我可能会通过google_visualr gem使用Google的可视化API之类的东西 - 寻找类似的东西。 – 2013-03-01 10:50:28

+0

感谢Egor/David。是直接查询PLAN_TABLE,而不是使用'select * from table(dbms_xplan.display);'实际上有正确的格式。我认为对我来说更容易的是将它放在我自己的Java数据结构中,而不是试图找到已经做到这一点的东西。 – nemo 2013-03-01 19:02:11