2013-03-01 2 views
2

Интересно, существует ли какая-либо библиотека, которая позволяет разбора плана объяснения оракула в структуру данных.Java Parsing Oracle Explain Plan

Учитывая следующий запрос:

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

Я думаю, вы можете запросить план объяснения в XML, используя JDBC –

ответ

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 я, вероятно, использовал бы что-то вроде API визуализации Google через gogle google_visualr - ищите что-то подобное. –

+0

благодарит Егора/Дэвида. да напрямую запрашивать PLAN_TABLE, а не использовать 'select * from table (dbms_xplan.display);' на самом деле имеет правильное форматирование. Я думаю, что мне легче было бы взять его и поместить в мою собственную структуру данных Java, а не пытаться найти то, что уже делает это. – nemo

Смежные вопросы