Java解析Oracle解释计划

Java解析Oracle解释计划,java,sql,oracle,jdbc,sql-execution-plan,Java,Sql,Oracle,Jdbc,Sql Execution Plan,我想知道是否有任何库允许将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 Nam

我想知道是否有任何库允许将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)
我想要一个解析器,它将计划解析为一个数据结构,允许可视化和分析计划,如下所示:

 ------------------------------------------
  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)

我注意到甲骨文公司把这个计划形象化了。我不愿意手动解析文本,因此我想知道是否有任何库可以帮助解析计划。

计划已存储为分层结构,以便于可视化:

  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

这个结构如何更方便?

我认为您可以使用JDBCYes请求XML中的解释计划,它只是一个标准的父子自引用结构。在Rails中,我可能会通过Google_visualr gem使用类似于Google的可视化API的东西——寻找类似的东西。谢谢Egor/David。是直接查询计划表,而不是使用
select*from表(dbms\u xplan.display)实际上具有正确的格式。我认为对我来说,更容易的方法是将它放在我自己的Java数据结构中,而不是试图找到已经做到这一点的东西。