DBMS_SPD
パッケージは、SQLプラン・ディレクティブ(SPD)を管理するためのサブプログラムを提供します。
この章では、次の項目について説明します。
概要
セキュリティ・モデル
ビュー
このパッケージは、SQLプラン・ディレクティブ(SPD)を管理するためのサブプログラムを提供します。SPDは、Oracleによって自動的に生成されるオブジェクトです。たとえば、オプティマイザによって推測された単一表のカーディナリティが、表へのアクセス時に戻された実際の行数と異なることがOracleによって検出された場合、その表の動的統計を実行するディレクティブが自動的に作成されます。表を参照するSQL文がコンパイルされたときに、オプティマイザはその表の動的統計を実行し、より正確な推測値を取得します。
表147-1 DBMS_SPDパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
ALTER_SQL_PLAN_DIRECTIVEプロシージャ |
SQLプラン・ディレクティブの様々な属性を変更します。 |
|
SQLプラン・ディレクティブをパック(エクスポート)するステージング表を作成します。 |
|
SQLプラン・ディレクティブを削除します。 |
FLUSH_SQL_PLAN_DIRECTIVEプロシージャ |
SQL文の実行中にSGAメモリーに自動的に記録されるSQLプラン・ディレクティブの手動フラッシュを許可します。 |
|
SQLプラン・ディレクティブのプリファレンスの値を取得します。 |
|
SQLプラン・ディレクティブをステージング表にパック(エクスポート)します。 |
|
SQLプラン・ディレクティブの様々なプリファレンスの設定を許可します。 |
UNPACK_STGTAB_DIRECTIVEファンクション |
SQLプラン・ディレクティブをステージング表からアンパック(インポート)します。 |
このプロシージャは、SQLプラン・ディレクティブの様々な属性を変更します。
構文
DBMS_SPD.ALTER_SQL_PLAN_DIRECTIVE ( directive_id IN NUMBER, attribute_name IN VARCHAR2, attribute_value IN VARCHAR2);
パラメータ
表147-2 ALTER_SQL_PLAN_DIRECTIVEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQLプラン・ディレクティブのID。 |
|
|
|
有効な値は、次のとおりです。
|
このプロシージャは、SQLプラン・ディレクティブをパック(エクスポート)するステージング表を作成します。
構文
DBMS_SPD.CREATE_STGTAB_DIRECTIVE ( table_name IN VARCHAR2, table_owner IN VARCHAR2 := USER, tablespace_name IN VARCHAR2 := NULL);
このプロシージャは、SQLプラン・ディレクティブを削除します。
このプロシージャは、SQL文の実行中にSGAメモリーに自動的に記録されるSQLプラン・ディレクティブの手動フラッシュを許可します。SGAで記録された情報は、Oracleバックグラウンド処理で定期的にフラッシュされます。このプロシージャは、手動で情報をフラッシュする方法を提供します。
この機能では、SQLプラン・ディレクティブに指定されたプリファレンスの値が戻されます。
例外
ORA-38171 INSUFFICIENT_PRIVILEGE
: ユーザーには、操作を実行するための適切な権限がありません。
ORA-28104 INVALID_INPUT
: 入力値が無効です。
このファンクションは、SQLプラン・ディレクティブをステージング表にパック(エクスポート)します。
構文
DBMS_SPD.PACK_STGTAB_DIRECTIVE ( table_name IN VARCHAR2, table_owner IN VARCHAR2 := USER directive_id IN NUMBER := NULL, obj_list IN OBJECTTAB := NULL) RETURN NUMBER
パラメータ
表147-6 PACK_STGTAB_DIRECTIVEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ステージング表の名前。 |
|
ステージング表のスキーマ所有者の名前。デフォルトは現在のスキーマです。 |
|
SQLプラン・ディレクティブのID。デフォルトの |
|
ディレクティブで使用されるオブジェクトに基づいて、パックするディレクティブをフィルタするために使用されます。 |
例外
ORA-38171 INSUFFICIENT_PRIVILEGE
: ユーザーには、操作を実行するための適切な権限がありません。
ORA-28104 INVALID_INPUT
: 入力値が無効です。
ORA-44001 INVALID_SCHEMA
: 入力されたスキーマは存在しません。
ORA-29304 INVALID_STGTAB
: 指定されたステージング表が無効であるか、存在しません。
ORA-13158 OBJECT_DOES_NOT_EXIST
: 指定されたオブジェクトは存在しません。
例
-- Pack all directives in the system SELECT DBMS_SPD.PACK_STGTAB_DIRECTIVE('mydirtab') FROM DUAL; SET SERVEROUTPUT ON; -- Pack directives relevant to objects in SH schema DECLARE my_list DBMS_SPD.OBJECTTAB := DBMS_SPD.ObjectTab(); dir_cnt NUMBER; BEGIN my_list.extend(1); my_list(1).owner := 'SH'; -- schema name my_list(1).object_name := NULL; -- all tables in SH my_list(1).object_type := 'TABLE'; -- type of object dir_cnt := DBMS_SPD.PACK_STGTAB_DIRECTIVE('mydirtab', obj_list => my_list); DBMS_OUTPUT.PUT_LINE('dir_cnt = ' || dir_cnt); END; -- Pack directives relevant to tables SALES and CUSTOMERS in SH schema DECLARE my_list DBMS_SPD.OBJECTTAB := DBMS_SPD.ObjectTab(); dir_cnt NUMBER; BEGIN my_list.extend(2); -- SALES table my_list(1).owner := 'SH'; my_list(1).object_name := 'SALES'; my_list(1).object_type := 'TABLE'; -- CUSTOMERS table my_list(2).owner := 'SH'; my_list(2).object_name := 'CUSTOMERS'; my_list(2).object_type := 'TABLE'; dir_cnt := DBMS_SPD.PACK_STGTAB_DIRECTIVE('mydirtab', obj_list => my_list); DBMS_OUTPUT.PUT_LINE('dir_cnt = ' || dir_cnt); END;
このプロシージャは、SQLプラン・ディレクティブの様々なプリファレンスの設定を許可します。
パラメータ
表147-7 SET_PREFSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
プリファレンスの名前。このプロシージャでは、プリファレンス |
|
プリファレンスの値。
|
例外
ORA-38171 INSUFFICIENT_PRIVILEGE
: ユーザーには、操作を実行するための適切な権限がありません。
ORA-28104 INVALID_INPUT
: 入力値が無効です。
このプロシージャは、SQLプラン・ディレクティブをステージング表からアンパック(インポート)します。
構文
DBMS_SPD.UNPACK_STGTAB_DIRECTIVE ( table_name IN VARCHAR2, table_owner IN VARCHAR2 := USER, directive_id IN NUMBER := NULL, obj_list IN OBJECTTAB := NULL) RETURN NUMBER
パラメータ
表147-8 UNPACK_STGTAB_DIRECTIVEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ステージング表の名前。 |
|
ステージング表のスキーマ所有者の名前。デフォルトは現在のスキーマです。 |
|
SQLプラン・ディレクティブのID。デフォルトの |
|
ディレクティブで使用されるオブジェクトに基づいて、アンパックするディレクティブをフィルタするために使用されます。 |
例外
ORA-38171 INSUFFICIENT_PRIVILEGE
: ユーザーには、操作を実行するための適切な権限がありません。
ORA-28104 INVALID_INPUT
: 入力値が無効です。
ORA-44001 INVALID_SCHEMA
: 入力されたスキーマは存在しません。
ORA-29304 INVALID_STGTAB
: 指定されたステージング表が無効であるか、存在しません。
ORA-13158 OBJECT_DOES_NOT_EXIST
: 指定されたオブジェクトは存在しません。
例
-- Unack all directives in the staging table SELECT DBMS_SPD.UNPACK_STGTAB_DIRECTIVE('mydirtab') FROM DUAL; SET SERVEROUTPUT ON; -- Unpack directives relevant to objects in SH schema DECLARE my_list DBMS_SPD.OBJECTTAB := DBMS_SPD.ObjectTab(); dir_cnt number; BEGIN my_list.extend(1); my_list(1).owner := 'SH'; -- schema name my_list(1).object_name := null; -- all tables in SH my_list(1).object_type := 'TABLE'; -- type of object dir_cnt := DBMS_SPD.UNPACK_STGTAB_DIRECTIVE('mydirtab', obj_list => my_list); DBMS_OUTPUT.PUT_LINE('dir_cnt = ' || dir_cnt); END; -- Unpack directives relevant to tables SALES and CUSTOMERS in SH schema DECLARE my_list DBMS_SPD.OBJECTTAB := DBMS_SPD.ObjectTab(); dir_cnt NUMBER; begin my_list.extend(2); -- SALES table my_list(1).owner := 'SH'; my_list(1).object_name := 'SALES'; my_list(1).object_type := 'TABLE'; -- CUSTOMERS table my_list(2).owner := 'SH'; my_list(2).object_name := 'CUSTOMERS'; my_list(2).object_type := 'TABLE'; dir_cnt := DBMS_SPD.UNPACK_STGTAB_DIRECTIVE('mydirtab', obj_list => my_list); DBMS_OUTPUT.PUT_LINE('dir_cnt = ' || dir_cnt); END;