EXPLAIN_FROM_CATALOG プロシージャー - カタログからのセクション情報を使用したステートメントの Explain
EXPLAIN_FROM_CATALOG プロシージャーは、カタログから得られるセクションの内容を使用してステートメントを Explain します。
Explain の出力は Explain 表に格納され、任意の既存の Explain ツール (例えば db2exfmt) を使ってこれを処理できます。
許可
このルーチンを実行するには、以下のいずれかの権限または特権が必要です。
- ルーチンに対する EXECUTE 特権
- DATAACCESS 権限
- DBADM 権限
- SQLADM 権限
- EXPLAIN 権限
さらに、グループに付与された特権を含め、セッションの許可 ID によって保持されている特権には、少なくとも以下のいずれかが含まれていなければなりません。
- 指定されたスキーマ内の Explain 表に対する INSERT 特権
- 指定されたスキーマ内の Explain 表に対する CONTROL 特権
- DATAACCESS 権限
デフォルトの PUBLIC 特権
なし
構文
スキーマは SYSPROC です。
プロシージャー・パラメーター
- pkgschema
- Explain されるセクションを含むパッケージのスキーマを指定する、タイプ VARCHAR(128) の入力引数。 pkgschema が NULL または空ストリングの場合、SQL2032N が戻されます。
- pkgname
- Explain されるセクションを含むパッケージを指定する、タイプ VARCHAR(128) の入力引数。 pkgname が NULL または空ストリングの場合、SQL2032N が戻されます。
- pkgversion
- Explain されるセクションを含むパッケージのバージョン ID を指定する、タイプ VARCHAR(64) の入力引数。 パッケージにバージョンがない場合は、空ストリングを指定します (VARCHAR2 互換モードが有効になっている場合はブランク ' ' 文字)。 pkgversion が NULL である場合、SQL2032N が戻されます。
- sectno
- Explain されるセクションを指定する、タイプ SMALLINT の入力引数。 sectno が NULL である場合、SQL2032N が戻されます。
- explain_schema
- タイプ VARCHAR(128) のオプションの入力または出力引数。Explain 情報が書き込まれる Explain 表を含むスキーマを指定します。 空ストリングまたは NULL を指定した場合、セッション許可 ID のもとで Explain 表が検索され、その後、SYSTOOLS スキーマで検索されます。 Explain 表が見つからない場合、SQL0219N が戻されます。 呼び出し元が Explain 表に対する INSERT 特権を持っていない場合、SQL0551N が戻されます。 出力の場合、このパラメーターは、情報が書き込まれた Explain 表を含んでいるスキーマに設定されます。
- explain_requester
- タイプ VARCHAR(128) の出力引数。このルーチンが呼び出された接続のセッション許可 ID が格納されます。
- explain_time
- Explain 要求の開始時刻を格納する、タイプ TIMESTAMP の出力引数。
- source_name
- タイプ VARCHAR (128) の出力引数。ステートメントの準備時またはコンパイル時に実行されていたパッケージの名前を格納します。
- source_schema
- ソース Explain 要求のスキーマまたは修飾子を格納する、タイプ VARCHAR(128) の出力引数。
- source_version
- Explain 要求のソースのバージョンを格納する、タイプ VARCHAR(64) の出力引数。
使用上の注意
入力パラメーターに一致するセクションが見つからない場合は SQL20501 が戻されます。
出力パラメーター explain_requester、explain_time、source_name、source_schema、source_version はキーを構成し、これを使って Explain 表内のセクションに関する Explain 情報を検索します。 セクションから取得された Explain 情報をフォーマット設定するために、既存の任意の Explain ツール (例えば db2exfmt) でこれらのパラメーターを使用できます。
このプロシージャーは、Explain 表への挿入後に COMMIT ステートメントを発行しません。 プロシージャーの呼び出し元が COMMIT を発行する必要があります。
例
以下の例は、コンパイル済みでカタログ内に存在する静的ステートメントを Explain する方法を示しています。
まず、例えば次のようにして SYSCAT.STATEMENTS カタログ・ビューから選択することにより、セクションを識別できます。
SELECT pkgschema,
pkgname,
version,
Sectno
FROM SYSCAT.STATEMENTS
WHERE TEXT = 'select count(*) from syscat.tables'この照会により、以下の例のような出力が戻されます。
PKGSCHEMA PKGNAME VERSION SECTNO
---------- -------------------- --------------------- ------
NULLID SQLE2G0S 1
NULLID SQLE2G0S VERSION1 1
2 record(s) selected.次に、例えば以下のようにして、識別情報 pkgschema、pkgname、version および sectno を EXPLAIN_FROM_CATALOG プロシージャーに渡します。
CALL EXPLAIN_FROM_CATALOG( 'NULLID', 'SQLE2G0S', '', 1, 'MYSCHEMA', ?, ?, ?, ?, ? )