2013-03-01 70 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