このパッケージは、ストアド・プロシージャから一部のSQLデータ定義言語(DDL)文へのアクセスを提供します。データ定義言語(DDL)文では使用できない特殊な管理操作も提供します。
この章では、次の項目について説明します。
推奨されないサブプログラム
セキュリティ・モデル
使用上の注意
この項では、DBMS_DDLパッケージの使用に関連する項目について説明します。
表53-1 DBMS_DDLパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
|
PL/SQLオブジェクトをコンパイルします。 |
|
ALTER_TABLE_NOT_REFERENCEABLEプロシージャ |
オブジェクト表を再編成します。 |
|
ALTER_TABLE_REFERENCEABLEプロシージャ |
オブジェクト表を再編成します。 |
|
|
PL/SQLパッケージ仕様部、パッケージ本体、ファンクション、プロシージャ、タイプ仕様部、またはタイプ本体の作成を指定する単一の |
|
|
指定したDMLまたはDDLトリガーが1回起動されるように設定されている場合は、 |
|
SET_TRIGGER_FIRING_PROPERTYプロシージャ |
指定したDMLまたはDDLトリガーの起動プロパティを設定します。 |
|
|
PL/SQLパッケージ仕様部、パッケージ本体、ファンクション、プロシージャ、タイプ仕様部、またはタイプ本体の作成を指定する |
このプロシージャは、次のSQL文と同じです。
ALTER PROCEDURE|FUNCTION|PACKAGE [<schema>.] <name> COMPILE [BODY]
|
注意: リリース10gR2では、このプロシージャの使用は推奨されていません。このパッケージでこのプロシージャを使用することはできますが、動的SQL文でこれに相当するDDLを使用することをお薦めします。 |
構文
DBMS_DDL.ALTER_COMPILE ( type VARCHAR2, schema VARCHAR2, name VARCHAR2 reuse_settings BOOLEAN := FALSE);
このプロシージャは任意のオブジェクト表table_schema.table_nameを変更して、スキーマaffected_schemaのデフォルトの参照可能表にならないようにします。これは、次のSQLと同じです。
ALTER TABLE [<table_schema>.]<table_name> NOT REFERENCEABLE FOR <affected_schema>
これは現在サポートされていないか、DDL文として使用できません。
構文
DBMS_DDL.ALTER_TABLE_NOT_REFERENCEABLE ( table_name IN VARCHAR2, table_schema IN DEFAULT NULL, affected_schema IN DEFAULT NULL);
使用上の注意
このプロシージャは、影響を受けるスキーマをPUBLICのデフォルトの参照可能表に戻すのみであり、つまり、この特定のスキーマに対して以前に行われたALTER_TABLE_REFERENCEABLEコールを元に戻します。影響を受けるスキーマは、特定のスキーマである必要があります(PUBLICは指定できません)。
このプロシージャを実行するユーザーは表を所有する必要があり(スキーマはユーザーと同じ)、影響を受けるスキーマはユーザーと同じである必要があります。
このプロシージャを実行するユーザーにALTER ANY TABLE、SELECT ANY TABLEおよびDROP ANY TABLEの権限がある場合、ユーザーは表を所有する必要はなく、影響を受けるスキーマは任意の有効なスキーマに設定できます。
このプロシージャは任意のオブジェクト表table_schema.table_nameを変更して、任意のスキーマaffected_schemaの参照可能表にします。これは、次のSQLと同じです。
ALTER TABLE [<table_schema>.]<table_name> REFERENCEABLE FOR <affected_schema>
これは現在サポートされていないか、DDL文として使用できません。
構文
DBMS_DDL.ALTER_TABLE_REFERENCEABLE table_name IN VARCHAR2, table_schema IN DEFAULT NULL, affected_schema IN DEFAULT NULL);
使用上の注意
オブジェクト表を作成するときにOID AS句を使用しないかぎり、表は自動的に参照可能になります。OID AS句を使用すると、オブジェクト表を作成し、新しい表を同じタイプの別のオブジェクト表として同じEOIDに割り当てることができます。OID AS句を使用して新しい表を作成した後は、同じEOIDを持つ2つのオブジェクト表が存在しますが、新しい表は参照できず、元の表は参照可能です。元の表に含まれるオブジェクトを指すために使用されるすべての参照は、同じ元の表に含まれる同じオブジェクトを引き続き参照します。
このプロシージャを新しい表で実行すると、新しい表が参照可能表になり、元の表が置き換えられます。そのため、参照は元の表ではなく新しい表のオブジェクトを指すようになります。
このプロシージャは、PL/SQLパッケージ仕様部、パッケージ本体、ファンクション、プロシージャ、タイプ仕様部、またはタイプ本体の作成を指定する単一のCREATE OR REPLACE文の入力時に使用します。その後、PL/SQLソース・テキストをわかりにくくしたCREATE OR REPLACE文が生成され、実行されます。実際には、このプロシージャには、テキストの折返しおよびPL/SQLユニットの作成の各操作がまとめられています。
このプロシージャには3つのオーバーロードがあります。個々のWRAPファンクションとDBMS_SQL.PARSE(またはEXECUTE IMMEDIATE)コールを組み合せて使用するより、3つのファンクションをそれぞれ使用する方がパフォーマンスが向上します。複数の機能を構文形式ごとに、定義とともに示します。
構文
EXECUTE IMMEDIATE SYS.DBMS_DDL.WRAP(ddl)のショートカット
DBMS_DDL.CREATE_WRAPPED ( ddl VARCHAR2);
DBMS_SQL.PARSE(cursor, SYS.DBMS_DDL.WRAP (input, lb, ub))のショートカット
DBMS_DDL.CREATE_WRAPPED( ddl DBMS_SQL.VARCHAR2A, lb PLS_INTEGER, ub PLS_INTEGER);
DBMS_SQL.PARSE(cursor, SYS.DBMS_DDL.WRAP (input, lb, ub))のショートカット
DBMS_DDL.CREATE_WRAPPED( ddl DBMS_SQL.VARCHAR2S, lb PLS_INTEGER, ub PLS_INTEGER);
使用上の注意
CREATE OR REPLACE文は、DBMS_DDL.CREATE_WRAPPEDを起動するユーザーの権限で実行されます。
これらのインタフェースをコールするPL/SQLコードでは、名前DBMS_DDLがローカル定義のユニットまたはDBMS_DDLパブリック・シノニムの再定義によって取得されないようにするために、完全修飾のパッケージ名SYS.DBMS_DDLを使用する必要があります。
起動するたびに、単一のPL/SQLユニットのみを受け入れます。これに対して、PL/SQL wrapユーティリティでは、SQL*Plusファイル全体を受け入れて、ファイル内のPL/SQLユニットをわかりにくくし、その他のすべてのテキストはそのままにします。これらのインタフェースは、PL/SQLの動的SQLインタフェース(EXECUTE IMMEDIATEおよびDBMS_SQL.PARSE)と組み合せて使用するか、またはPL/SQLの動的SQLインタフェースの代用として使用します。これらの動的SQLインタフェースは一度に1つのユニットのみ受け入れるため(また、SQL*Plusの/終了文字は認識されないため)、CREATE_WRAPPEDプロシージャおよびWRAPファンクションの両方で、単一ユニットを入力する必要があります。
このファンクションは、指定したDMLまたはDDLトリガーが1回起動されるように設定されている場合は、TRUEを戻します。それ以外の場合はFALSEを戻します。
トリガーはユーザー・セッションで1回起動されますが、次の場合には起動されません。
Streams適用プロセスによる変更
DBMS_APPLY_ADMパッケージのEXECUTE_ERRORプロシージャまたはEXECUTE_ALL_ERRORSプロシージャを使用して、Streams適用エラーを1つ以上実行したことによる変更
ロジカル・スタンバイ適用プロセスによる変更
|
注意: DMLおよびDDLトリガーは、1回のみ起動されます。他のタイプのトリガーはすべて、何回でも起動されます。 |
このプロシージャは、指定したDMLまたはDDLトリガーの起動プロパティを、プロパティがトリガーに設定されているかどうか設定します。次の変更に対するDMLまたはDDLトリガーの起動プロパティを制御するために使用します。
Streams適用プロセスによって適用された変更
DBMS_APPLY_ADMパッケージのEXECUTE_ERRORプロシージャまたはEXECUTE_ALL_ERRORSプロシージャを使用して、Streams適用エラーを1つ以上実行したことによる変更
ロジカル・スタンバイ適用プロセスによって適用された変更
構文
DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY ( trig_owner IN VARCHAR2, trig_name IN VARCHAR2, fire_once IN BOOLEAN); DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY ( trig_owner IN VARCHAR2, trig_name IN VARCHAR2, property IN INTEGER, setting IN BOOLEAN);
パラメータ
表53-8 SET_TRIGGER_FIRING_PROPERTYプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
設定するトリガーのスキーマ。 |
|
|
設定するトリガーの名前。 |
|
|
|
|
|
|
|
|
設定しているプロパティの値 |
使用上の注意
表で作成されたDMLトリガーのfire-onceプロパティは、TRUEに設定されています。この場合、トリガーは、表がユーザー・プロセスによって変更されたときにのみ起動され、ロジカル・スタンバイ・データベース(SQL適用)またはレプリケーション(Streams適用)プロセスを実行するOracleプロセスのいずれかを保守するOracleプロセス内では自動的に無効になるため、SQL適用またはStreams適用プロセスによって表が変更されたときには起動されません。保持されている表がSQL適用プロセスまたはStreams適用プロセスによって変更された場合にユーザーがトリガーを起動する方法は2つありますが、それらは、(a)ユーザー・プロセスのコンテキストまたはSQL適用プロセスやStreams適用プロセスのコンテキストのいずれでもトリガーを起動できるように、トリガーのfire-onceプロパティをFALSEに設定するか、(b)apply-server-onlyプロパティをTRUEに設定して、ユーザー・プロセス・コンテキストではなく、SQL適用プロセスとStreams適用プロセスのコンテキストでのみトリガーが起動されるようにします。
FIRE_ONCE=TRUE, APPLY_SERVER_ONLY=FALSE
これがDMLトリガーのデフォルトのプロパティ設定です。トリガーは、ユーザー・プロセスで元表が変更された場合にのみ起動されます。
FIRE_ONCE=TRUEまたはFALSE、APPLY_SERVER_ONLY=TRUE
トリガーは、SQL適用プロセスまたはStreams適用プロセスで元表が変更された場合にのみ起動されます。ユーザー・プロセスが元表が変更された場合は、トリガーは起動されません。したがって、apply-server-onlyプロパティはトリガーのfire-onceプロパティよりも優先されます。
|
注意:
|
|
関連項目: 適用プロセスおよびトリガー起動プロパティの制御方法の詳細は、『Oracle Streams概要および管理』を参照してください。 |
このファンクションは、PL/SQLパッケージ仕様部、パッケージ本体、ファンクション、プロシージャ、タイプ仕様部、またはタイプ本体の作成を指定する単一のCREATE OR REPLACE文の入力時に使用し、PL/SQLユニットのテキストをわかりにくくしたCREATE OR REPLACE文を戻します。
このファンクションには、3つのオーバーロードがあり、それぞれの方法でDDL文を動的に生成して、それらのDDL文をDBMS_SQLまたはEXECUTE IMMEDIATEに指定できます。複数の機能を構文形式ごとに、定義とともに示します。
構文
基本機能を実行します。
DBMS_DDL.WRAP( ddl VARCHAR2) RETURN VARCHAR2;
最初の形式と同じ機能を実行しますが、より多くの入力が可能です。このファンクションは、DBMS_SQLパッケージのPARSEプロシージャとともに使用し、引数リストはDBMS_SQL.PARSEの表記規則に従います。
DBMS_DDL.WRAP( ddl DBMS_SQL.VARCHAR2S, lb PLS_INTEGER, ub PLS_INTEGER) RETURN DBMS_SQL.VARCHAR2S;
2番目の形式と同じ機能を実行しますが、DBMS_SQLパッケージのPARSEプロシージャの様々な形式と互換性があります。
DBMS_DDL.WRAP( ddl DBMS_SQL.VARCHAR2A, lb PLS_INTEGER, ub PLS_INTEGER) RETURN DBMS_SQL.VARCHAR2A;
戻り値
テキストをわかりにくくしたCREATE OR REPLACE文。2番目と3番目の形式の場合、戻り値は、わかりにくくしたソース・テキストを含むCREATE OR REPLACE文字列を構成するために、連結する必要がある文字列の表になります。
使用上の注意
これらのインタフェースをコールするPL/SQLコードでは、名前DBMS_DDLがローカル定義のユニットまたはDBMS_DDLパブリック・シノニムの再定義によって取得されないようにするために、完全修飾のパッケージ名SYS.DBMS_DDLを使用する必要があります。
起動するたびに、単一のPL/SQLユニットのみを受け入れます。これに対して、PL/SQL wrapユーティリティでは、SQLファイル全体を受け入れて、ファイル内のPL/SQLユニットをわかりにくくし、その他のすべてのテキストはそのままにします。これらのインタフェースは、PL/SQLの動的SQLインタフェース(EXECUTE IMMEDIATEおよびDBMS_SQL.PARSE)と組み合せて使用するか、またはPL/SQLの動的SQLインタフェースの代用として使用します。これらの動的SQLインタフェースは一度に1つのユニットのみ受け入れるため(また、SQL*Plusの/終了文字は認識されないため)、CREATE_WRAPPEDプロシージャおよびWRAPファンクションの両方で、単一ユニットを入力する必要があります。