пакет должен вернуть план выполнения и статистику запроса

Предположим, я выполняю свой скрипт в sql plus, как показано ниже.

sql>set autotrace traceonly;
sql>select * from employees;


Execution Plan
----------------------------------------------------------
   0       SELECT STATEMENT Optimizer Mode=ALL_ROWS (Cost=2 Card=14 Bytes=1 K)
   1    0    TABLE ACCESS FULL T416493.EMPLOYEE (Cost=2 Card=14 Bytes=1 K)

Statistics
----------------------------------------------------------
      6  user calls
      0  physical read total multi block requests
      0  physical read total bytes
      0  cell physical IO interconnect bytes
      0  commit cleanout failures: block lost
      0  IMU commits
      0  IMU Flushes
      0  IMU contention
      0  IMU bind flushes
      0  IMU mbu flush
     14  rows processed

я создаю пакет, где я передаю запрос, и он предоставит мне план выполнения с этой статистикой. Как я могу реализовать этот пакет?


person Gaurav Soni    schedule 31.05.2012    source источник
comment
Взгляните на документы пакета DBMS_XPLAN, а также таблица SYS.PLAN_TABLE$ и представление PUBLIC.PLAN_TABLE.   -  person Bob Jarvis - Reinstate Monica    schedule 31.05.2012
comment
что у вас есть до сих пор?   -  person tbone    schedule 31.05.2012
comment
PUBLIC.PLAN_TABLE — это синоним, а не представление. Дох!   -  person Bob Jarvis - Reinstate Monica    schedule 31.05.2012
comment
@tbone: сейчас я пуст :), понятия не имею, как это получить   -  person Gaurav Soni    schedule 31.05.2012
comment
в вашей процедуре запустите план объяснения для запроса и используйте dbms_xplan для отображения результатов (плана и статистики). См. oracle-base.com/articles/9i/dbms_xplan.php. подробнее об использовании dbms_xplan.   -  person tbone    schedule 01.06.2012


Ответы (1)


Вот базовая оболочка для DMBS_XPLAN.

CREATE OR REPLACE PROCEDURE print_plan(p_sql IN VARCHAR2)
IS
BEGIN
  EXECUTE IMMEDIATE 'explain plan for '||p_sql;

  FOR r_plan IN (SELECT * 
                 FROM table(DBMS_XPLAN.DISPLAY))
  LOOP
    dbms_output.put_line(r_plan.plan_table_output);
  END LOOP;
END;
/

BEGIN
  print_plan('select 1 from dual');
END;
/
person jva    schedule 25.07.2012
comment
меня интересует статистика, что я показал в своем вопросе, в любом случае, спасибо - person Gaurav Soni; 25.07.2012