ORACLE で実行した SQLから実行計画を表示する

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にしか使えませんが テーブル等を作らなくて良いのは助かります。

Google サイト内検索

Amazonアソシエイト