ORACLE で実行計画を表示したい状況があったのですが 自由にテーブルを作れる環境ではなく どうしようかと思っていたところ、 実行したSQLに対して実行計画を表示する方法がありました。
次のように「DBMS_XPLAN.DISPLAY_CURSOR」を使用します。
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
最後に実行したSQLの実行計画が次のように表示されます。
PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- SQL_ID dyk4dprp70d74, child number 0 ------------------------------------- SELECT DECODE('A','A','1','2') FROM DUAL Plan hash value: 1388734953 ----------------------------------------------------------------- | Id | Operation | Name | Rows | Cost (%CPU)| Time | ----------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 2 (100)| | | 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 | PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- -----------------------------------------------------------------
ただ、DISPLAY_CURSOR の実行には「V$SQL_PLAN、V$SESSIONおよびV$SQL_PLAN_STATISTICS_ALL.の各固定ビューに対するSELECT権限が必要です。」とのことです。
[参考]
DBMS_XPLAN - OracleR Database PL/SQLパッケージおよびタイプ・リファレンス
実行したSQLを指定するには、 V$SQL で SQL_ID を調べて 以下のように実行します。
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('SQL_ID'));
実行したSQLにしか使えませんが テーブル等を作らなくて良いのは助かります。