DBMS_UTILITYパッケージは、各種のユーティリティ・サブプログラムを提供します。
この章では、次の項目について説明します。
セキュリティ・モデル
定数
タイプ
例外
DBMS_UTILITY
は、NAME_RESOLVEプロシージャおよびCOMPILE_SCHEMAプロシージャのコール・ユーザーの権限で実行されます。これは、SQLの正しい動作のために必要です。
このパッケージは、SYS
として実行されません。 権限は、DBMS_DDL
を使用してチェックされます。
DBMS_UTILITY
パッケージでは、表141-1「DBMS_UTILITYの定数」に示す定数が使用されます。
表141-1 DBMS_UTILITYの定数
名前 | 型 | 値 | 説明 |
---|---|---|---|
|
|
|
INVALIDATEサブプログラムの |
TYPE dblink_array IS TABLE OF VARCHAR2(128) INDEX BY BINARY_INTEGER;
データベース・リンクのリストは、ここに格納されます。
TYPE index_table_type IS TABLE OF BINARY_INTEGER INDEX BY BINARY_INTEGER;
オブジェクトの生成順序は、ここに戻されます。
TYPE instance_record IS RECORD ( inst_number NUMBER, inst_name VARCHAR2(60)); TYPE instance_table IS TABLE OF instance_record INDEX BY BINARY_INTEGER;
アクティブなインスタンス番号とインスタンス名のリスト。
instance_table
の索引の開始は1で、instance_table
は稠密です。
TYPE lname_array IS TABLE OF VARCHAR2(4000) index by BINARY_INTEGER;
Long NAME
のリストはここに格納されます。これには完全修飾属性名が含まれます。
TYPE name_array IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
NAME
のリストは、ここに格納されます。
TYPE number_array IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
ユーザーのためのオブジェクトの生成順序は、ここに戻されます。
TYPE uncl_array IS TABLE OF VARCHAR2(227) INDEX BY BINARY_INTEGER;
"USER
"."NAME
"."COLUMN
"@LINK
のリストは、ここに格納されます。
次の表に、DBMS_UTILITY
で発生する例外を示します。
表141-2 DBMS_UTILITYで発生する例外
例外 | エラー・コード | 説明 |
---|---|---|
|
-24237 |
|
|
-24238 |
コンパイラの設定が |
|
-24239 |
|
表141-3 DBMS_UTILITYパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
アクティブなインスタンスを戻します。 |
|
データベース内のすべての表、クラスタおよび索引を分析します。 |
|
指定した表および索引を分析します。 |
|
スキーマ内のすべての表、クラスタおよび索引を分析します。 |
|
指定した文字列を正規化します。 |
|
カンマで区切られた名前のリストを、名前のPL/SQL表に変換します。 |
|
指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージ、ビューおよびトリガーをコンパイルします。 |
CREATE_ALTER_TYPE_ERROR_TABLEプロシージャ |
|
|
現在接続しているインスタンス番号を戻します。 |
DATA_BLOCK_ADDRESS_BLOCKファンクション |
データ・ブロック・アドレスのブロック番号部分を取得します。 |
DATA_BLOCK_ADDRESS_FILEファンクション |
データ・ブロック・アドレスのファイル番号部分を取得します。 |
|
データベースに関するバージョン情報を戻します。 |
|
|
|
現行のコール・スタックをフォーマットします。 |
|
現行のエラーのポイントから、エラーがキャッチされた例外ハンドラまでのバックトレースをフォーマットします。 |
|
現行のエラー・スタックをフォーマットします。 |
|
現在のCPU時間を100分の1秒単位で戻します。 |
|
渡されたオブジェクトの依存関係を示します。 |
|
指定した文字列についてハッシュ値を計算します。 |
|
指定したinit.oraパラメータの値を取得します。 |
|
現在の時間を100分の1秒単位で検出します。 |
|
データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。 |
|
このデータベースがクラスタ・データベース・モードで実行しているかどうかを検出します。 |
MAKE_DATA_BLOCK_ADDRESSファンクション |
ファイル番号とブロック番号を指定して、データ・ブロック・アドレスを作成します。 |
|
指定した名前を解決します。 |
|
指定した名前を解析するためにパーサーをコールします。 |
|
|
|
|
|
Oracleとオペレーティング・システムのバージョンを一意に識別する文字列を戻します。 |
|
SQL IDをハッシュ値に変換します。 |
|
名前のPL/SQL表を、カンマで区切られた名前のリストに変換します。 |
|
無効なデータベース・オブジェクトを有効にします。 |
このプロシージャは、アクティブなインスタンスを戻します。
構文
DBMS_UTILITY.ACTIVE_INSTANCES ( instance_table OUT INSTANCE_TABLE, instance_count OUT NUMBER);
パラメータ
表141-4 ACTIVE_INSTANCESプロシージャのパラメータ
プロシージャ | 説明 |
---|---|
|
アクティブなインスタンス番号と名前のリストが含まれます。進行中のインスタンスがない場合、リストは空になります。 |
|
アクティブなインスタンスの数。 |
このプロシージャは、データベース内のすべての表、クラスタおよび索引を分析します。
構文
DBMS_UTILITY.ANALYZE_DATABASE ( method IN VARCHAR2, estimate_rows IN NUMBER DEFAULT NULL, estimate_percent IN NUMBER DEFAULT NULL, method_opt IN VARCHAR2 DEFAULT NULL);
パラメータ
表141-5 ANALYZE_DATABASEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
推定する行の数。 |
|
推定する行のパーセント。 |
|
次の形式のメソッド・オプション: [ [ [ |
例外
ORA
-20000
: このデータベース内のいずれかのオブジェクトに対する権限が不十分です。
このプロシージャは、次のSQLと同じです。
"ANALYZE TABLE|INDEX [<schema>.]<object_name> PARTITION <pname> [<command_type>] [<command_opt>] [<sample_clause>]
構文
DBMS_UTILITY.ANALYZE_PART_OBJECT ( schema IN VARCHAR2 DEFAULT NULL, object_name IN VARCHAR2 DEFAULT NULL, object_type IN CHAR DEFAULT 'T', command_type IN CHAR DEFAULT 'E', command_opt IN VARCHAR2 DEFAULT NULL, sample_clause IN VARCHAR2 DEFAULT 'sample 5 percent ');
パラメータ
表141-6 ANALYZE_PART_OBJECTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
分析するオブジェクトの名前。パーティション化されている必要があります。 |
|
オブジェクトのタイプ。 |
|
|
|
command_typeのその他のオプション。
|
|
|
使用上の注意
オブジェクトの各パーティションについて、ジョブ・キューを使用して並列に実行します。
このプロシージャは、スキーマ内のすべての表、クラスタおよび索引を分析します。
構文
DBMS_UTILITY.ANALYZE_SCHEMA ( schema IN VARCHAR2, method IN VARCHAR2, estimate_rows IN NUMBER DEFAULT NULL, estimate_percent IN NUMBER DEFAULT NULL, method_opt IN VARCHAR2 DEFAULT NULL);
パラメータ
表141-7 ANALYZE_SCHEMAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
|
|
|
推定する行の数。 |
|
推定する行のパーセント。 |
|
次の形式のメソッド・オプション: [ [ [ |
例外
ORA
-20000
: このスキーマ内のいずれかのオブジェクトに対する権限が不十分です。
このプロシージャは、指定した文字列を正規化します。このプロシージャは単一の予約語またはキーワード('table'など)を処理し、' table 'がTABLEになるように単一の識別子の空白を取り除きます。
構文
DBMS_UTILITY.CANONICALIZE( name IN VARCHAR2, canon_name OUT VARCHAR2, canon_len IN BINARY_INTEGER);
パラメータ
表141-8 CANONICALIZEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
正規化する文字列。 |
|
正規化された文字。 |
|
正規化する文字列の長さ(バイト単位)。 |
戻り値
canon_name
の先頭のcanon_len
バイトを戻します。
使用上の注意
name
がNULLの場合、canon_name
はNULLになります。
name
がドットの付いた名前でない場合、およびname
が二重引用符で囲まれている場合、二重引用符を削除します。 または、NLS_UPPERで大文字に変換します。この例には、スペースなどの特殊文字が使用されていても、二重引用符で囲まれていない名前は含まれません。
名前がドット付きの名前(a."b".cなど)の場合、ドット付きの名前の各要素の中に二重引用符で囲まれている要素がある場合、このコンポーネントに対する変換は行われません。 かわりに、NLS_UPPERによって大文字に変換し、この要素の大文字の形式を二重引用符で囲みます。そのような場合、正規化された各要素は、"."で区切られて、入力位置に連結されます。
a[.b]*の後の他の文字は無視されます。
このプロシージャでは、'A B'のような例は処理されません。
例
a
はA
に変換されます。
"a"
はa
に変換されます。
"a".b
は"a"."B"
に変換されます。
"a".b,c.f
は"a"."B"
に変換され、",c.f"
が無視されます。
これらのプロシージャは、カンマで区切られた名前のリストを、名前のPL/SQL表に変換します。2番目のバージョンでは、完全修飾属性名をサポートしています。
構文
DBMS_UTILITY.COMMA_TO_TABLE ( list IN VARCHAR2, tablen OUT BINARY_INTEGER, tab OUT uncl_array); DBMS_UTILITY.COMMA_TO_TABLE ( list IN VARCHAR2, tablen OUT BINARY_INTEGER, tab OUT lname_array);
パラメータ
表141-9 COMMA_TO_TABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
カンマで区切られた名前のリスト。最初のオーバーロードの場合、名前は 2番目のオーバーロードでは、
|
|
PL/SQL表にある表の数。 |
|
名前のリストを含んだPL/SQL表。 |
戻り値
PL/SQL表が、値1..n
とn+1
is
null
とともに戻されます。
使用上の注意
list
は、空ではないカンマで区切られたリストであることが必要です。カンマ区切りのリスト以外の場合は拒否されます。二重引用符内のカンマは無視されます。
カンマで区切られたリストに、マルチバイト・キャラクタを含めることはできません。
tab
にある値は、変換されずに元のリストからコピーされます。
このプロシージャは、指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージ、ビューおよびトリガーをコンパイルします。
構文
DBMS_UTILITY.COMPILE_SCHEMA ( schema VARCHAR2, compile_all BOOLEAN DEFAULT TRUE, reuse_settings BOOLEAN DEFAULT FALSE);
パラメータ
表141-10 COMPILE_SCHEMAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
|
|
|
オブジェクトのセッション設定を再利用するかどうか、または現在のセッション設定を採用するかどうかを指定します。 |
例外
表141-11 COMPILE_SCHEMAプロシージャの例外
例外 | 説明 |
---|---|
|
このスキーマ内のいずれかのオブジェクトに対して権限が不十分です。 |
|
|
|
最大反復数を超えています。一部のオブジェクトが再コンパイルされていない可能性があります。 |
使用上の注意
このサブプログラムは、UTL_RECOMPパッケージのRECOMP_SERIALプロシージャのラッパーであることに注意してください。
このプロシージャのコール後、ステータスがINVALID
の項目をビューALL_OBJECTS
から選択して、すべてのオブジェクトが正常にコンパイルされたかどうかを調べます。
Oracle Enterprise Managerのコマンドを使用すると、INVALID
のオブジェクトに関連するエラーを表示できます。
SHOW ERRORS <type> <schema>.<name>
このプロシージャは、ALTER
TYPE
文のEXCEPTION
句で使用するエラー表を作成します。
構文
DBMS_UTILITY.CREATE_ALTER_TYPE_ERROR_TABLE( schema_name IN VARCHAR2, table_name IN VARCHAR2);
パラメータ
例外
表がすでに存在する場合、エラーが戻されます。
このファンクションは、現在接続しているインスタンス番号を戻します。接続しているインスタンスが切断されると、NULL
を戻します。
構文
DBMS_UTILITY.CURRENT_INSTANCE RETURN NUMBER;
このファンクションは、データ・ブロック・アドレスのブロック番号部分を取得します。
構文
DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK ( dba NUMBER) RETURN NUMBER;
パラメータ
プラグマ
pragma restrict_references(data_block_address_block, WNDS, RNDS, WNPS, RNPS);
戻り値
ブロックのブロック・オフセット。
使用上の注意
このファンクションは、ビッグファイル表領域に属するデータブロックには使用しないでください。
このファンクションは、データ・ブロック・アドレスのファイル番号部分を取得します。
構文
DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE ( dba NUMBER) RETURN NUMBER;
パラメータ
プラグマ
pragma restrict_references (data_block_address_file, WNDS, RNDS, WNPS, RNPS);
戻り値
ブロックを含むファイル。
使用上の注意
このファンクションは、ビッグファイル表領域に属するデータブロックには使用しないでください。
このプロシージャは、データベースに関するバージョン情報を戻します。
構文
DBMS_UTILITY.DB_VERSION ( version OUT VARCHAR2, compatibility OUT VARCHAR2);
パラメータ
表141-15 DB_VERSIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
データベースの内部ソフトウェア・バージョンを表す文字列(例: 7.1.0.0.0)。 この文字列の長さは可変なので、データベース・バージョンによって決定されます。 |
|
COMPATIBLEがある このパラメータが |
このプロシージャは、parse_string
でDDL文を実行します。
構文
DBMS_UTILITY.EXEC_DDL_STATEMENT ( parse_string IN VARCHAR2);
パラメータ
このファンクションは、現行のコール・スタックをフォーマットします。このファンクションは、コール・スタックにアクセスするための任意ストアド・プロシージャまたはトリガーで使用できます。このファンクションは、デバッグ時に役立ちます。
構文
DBMS_UTILITY.FORMAT_CALL_STACK RETURN VARCHAR2;
プラグマ
pragma restrict_references(format_call_stack,WNDS);
戻り値
最大2000バイトまでのコール・スタックを戻します。
このプロシージャは、有効範囲外の例外ハンドラからコールされた場合でも、例外が発生したポイントのコール・スタックを表示します。出力は、SQLERRMファンクションの出力と似ていますが、サイズ制限が異なります。
構文
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE RETURN VARCHAR2;
戻り値
バックトレース文字列。現在処理されているエラーがない場合、NULL
文字列が返されます。
例
CREATE OR REPLACE PROCEDURE Log_Errors ( i_buff in varchar2 ) IS g_start_pos integer := 1; g_end_pos integer; FUNCTION Output_One_Line RETURN BOOLEAN IS BEGIN g_end_pos := Instr ( i_buff, Chr(10), g_start_pos ); CASE g_end_pos > 0 WHEN true THEN DBMS_OUTPUT.PUT_LINE ( Substr ( i_buff, g_start_pos, g_end_pos-g_start_pos ) ); g_start_pos := g_end_pos+1; RETURN TRUE; WHEN FALSE THEN DBMS_OUTPUT.PUT_LINE ( Substr ( i_buff, g_start_pos, (Length(i_buff)-g_start_pos)+1 ) ); RETURN FALSE; END CASE; END Output_One_Line; BEGIN WHILE Output_One_Line() LOOP NULL; END LOOP; END Log_Errors; / Set Doc Off Set Feedback off Set Echo Off CREATE OR REPLACE PROCEDURE P0 IS e_01476 EXCEPTION; pragma exception_init ( e_01476, -1476 ); BEGIN RAISE e_01476; END P0; / Show Errors CREATE OR REPLACE PROCEDURE P1 IS BEGIN P0(); END P1; / SHOW ERRORS CREATE OR REPLACE PROCEDURE P2 IS BEGIN P1(); END P2; / SHOW ERRORS CREATE OR REPLACE PROCEDURE P3 IS BEGIN P2(); END P3; / SHOW ERRORS CREATE OR REPLACE PROCEDURE P4 IS BEGIN P3(); END P4; / CREATE OR REPLACE PROCEDURE P5 IS BEGIN P4(); END P5; / SHOW ERRORS CREATE OR REPLACE PROCEDURE Top_Naive IS BEGIN P5(); END Top_Naive; / SHOW ERRORS CREATE OR REPLACE PROCEDURE Top_With_Logging IS -- NOTE: SqlErrm in principle gives the same info as Format_Error_Stack. -- But SqlErrm is subject to some length limits, -- while Format_Error_Stack is not. BEGIN P5(); EXCEPTION WHEN OTHERS THEN Log_Errors ( 'Error_Stack...' || Chr(10) || DBMS_UTILITY.FORMAT_ERROR_STACK() ); Log_Errors ( 'Error_Backtrace...' || Chr(10) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() ); DBMS_OUTPUT.PUT_LINE ( '----------' ); END Top_With_Logging; / SHOW ERRORS -------------------------------------------------------------------------------- Set ServerOutput On call Top_Naive() /* ERROR at line 1: ORA-01476: divisor is equal to zero ORA-06512: at "U.P0", line 4 ORA-06512: at "U.P1", line 3 ORA-06512: at "U.P2", line 3 ORA-06512: at "U.P3", line 3 ORA-06512: at "U.P4", line 2 ORA-06512: at "U.P5", line 2 ORA-06512: at "U.TOP_NAIVE", line 3 */ ; Set ServerOutput On call Top_With_Logging() /* Error_Stack... ORA-01476: divisor is equal to zero Error_Backtrace... ORA-06512: at "U.P0", line 4 ORA-06512: at "U.P1", line 3 ORA-06512: at "U.P2", line 3 ORA-06512: at "U.P3", line 3 ORA-06512: at "U.P4", line 2 ORA-06512: at "U.P5", line 2 ORA-06512: at "U.TOP_WITH_LOGGING", line 6 ---------- */ ; /* ORA-06512: Cause: Backtrace message as the stack is unwound by unhandled exceptions. Action: Fix the problem causing the exception or write an exception handler for this condition. Or you may need to contact your application administrator or database administrator. */
このファンクションは、現行のエラー・スタックをフォーマットします。このファンクションは、全エラー・スタックを表示するための例外ハンドラで使用できます。
構文
DBMS_UTILITY.FORMAT_ERROR_STACK RETURN VARCHAR2;
戻り値
最大2000バイトまでのエラー・スタックを戻します。
詳細は、「FORMAT_ERROR_BACKTRACEファンクション」を参照してください。
このファンクションは、現在のCPU時間を100分の1秒単位で戻します。CPU時間は、任意の時点からの時間を100分の1秒の数で戻されます。
構文
DBMS_UTILITY.GET_CPU_TIME RETURN NUMBER;
戻り値
任意の時点からの時間を100分の1秒の数で戻します。
使用上の注意
このサブプログラムは、作業の実行に使用されるサイクル(CPU時間)をレポートするもので、クロック時間またはその他の固定参照とは無関係です。ベースラインは基準となる線であり、実行される作業と生成される数の関係はオペレーティング・システムに固有であるため、実行された作業の量は、特定の操作の開始ポイントと終了ポイントの差分を測定することによって計算されます。
このプロシージャは、渡されたオブジェクトの依存関係を示します。
構文
DBMS_UTILITY.GET_DEPENDENCY type IN VARCHAR2, schema IN VARCHAR2, name IN VARCHAR2);
パラメータ
表141-17 GET_DEPENDENCYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトのタイプ。たとえば、オブジェクトが表の場合、タイプに' |
|
オブジェクトのスキーマ名。 |
|
オブジェクトの名前。 |
使用上の注意
このプロシージャは、DBMS_OUTPUTパッケージを使用して結果を表示します。依存性を表示する場合は、SET SERVEROUTPUT ON
を宣言する必要があります。 また、DBMS_OUTPUT
出力バッファをチェックするアプリケーションでこのサブプログラムを起動し、DBMS_OUTPUT
などのGET_LINES
サブプログラムを使用して出力を取得することもできます。
このファンクションは、指定した文字列についてハッシュ値を計算します。
構文
DBMS_UTILITY.GET_HASH_VALUE ( name VARCHAR2, base NUMBER, hash_size NUMBER) RETURN NUMBER;
パラメータ
表141-18 GET_HASH_VALUEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ハッシュする文字列。 |
|
戻されるハッシュ値が始まるベース値。 |
|
必要とするハッシュ表のサイズ。 |
プラグマ
pragma restrict_references(get_hash_value, WNDS, RNDS, WNPS, RNPS);
戻り値
ハッシュ値は、入力文字列に基づいています。 たとえば、ハッシュ値が1000から3047の範囲にある文字列についてハッシュ値を取得するには、ベース値として1000、hash_size
値として2048を使用します。 hash_size
パラメータは、2の累乗を使用すると動作が最適になります。
このファンクションは、指定したinit.ora
パラメータの値を取得します。
構文
DBMS_UTILITY.GET_PARAMETER_VALUE ( parnam IN VARCHAR2, intval IN OUT BINARY_INTEGER, strval IN OUT VARCHAR2, listno IN BINARY_INTEGER DEFAULT 1) RETURN BINARY_INTEGER;
パラメータ
表141-19 GET_PARAMETER_VALUEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
パラメータ名。 |
|
整数パラメータの値、または文字列パラメータの値の長さ。 |
|
文字列パラメータの値。 |
|
リスト項目番号。複数回指定して複数の値を蓄積可能なパラメータからパラメータ値を取得する場合は、このパラメータを使用して個別にそれぞれのパラメータを取得します。 |
戻り値
パラメータ・タイプ
パラメータが整数またはブール・パラメータの場合は0(ゼロ)
パラメータが文字列またはファイル・パラメータの場合は1
使用上の注意
DBMS_UTILITY.GET_PARAMETER_VALUE
を使用すると、init.ora
に次のように設定されている場合、先頭のパラメータ設定の/dir1
のみが戻されます。
utl_file_dir = /dir1 utl_file_dir = /dir2
ただし、次のように指定すると、完全なカンマ区切り文字列が戻されます。
utl_file_dir = /dir1, /dir2
例
DECLARE parnam VARCHAR2(256); intval BINARY_INTEGER; strval VARCHAR2(256); partyp BINARY_INTEGER; BEGIN partyp := dbms_utility.get_parameter_value('max_dump_file_size', intval, strval); dbms_output.put('parameter value is: '); IF partyp = 1 THEN dbms_output.put_line(strval); ELSE dbms_output.put_line(intval); END IF; IF partyp = 1 THEN dbms_output.put('parameter value length is: '); dbms_output.put_line(intval); END IF; dbms_output.put('parameter type is: '); IF partyp = 1 THEN dbms_output.put_line('string'); ELSE dbms_output.put_line('integer'); END IF; END;
このファンクションは、現在の時間を100分の1秒単位で判別します。このサブプログラムは、主に経過時間を確認するために使用します。 このサブプログラムは、2回(プロセスの開始時と終了時)コールされ、2つ目の(後の)数から1つ目の(先の)数を引くことで経過時間を判別します。
構文
DBMS_UTILITY.GET_TIME RETURN NUMBER;
戻り値
このサブプログラムが起動された時点からの時間を100分の1秒の数で戻します。
使用上の注意
プラットフォームおよびマシンに応じて、-2147483648から2147483647の範囲の数が戻されます。したがってアプリケーションによる間隔の判別では、数に付加される記号(マイナス記号)を考慮する必要があります。たとえば2つの数が負である場合、アプリケーション・ロジックで、1つ目の(先の)数が、よりゼロに近い2つ目の(後の)数よりも大きいことが許可される必要があります。同様に、アプリケーションでは、1つ目の(先の)数が負で2つ目の(後の)数が正であることも許可される必要があります。
このプロシージャは、データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。また、無効化されるオブジェクトに直接的または間接的に依存するすべてのオブジェクトも無効化します。
構文
DBMS_UTILITY.INVALIDATE ( p_object_id NUMBER, p_plsql_object_settings VARCHAR2 DEFAULT NULL, p_option_flags PLS_INTEGER DEFAULT 0);
パラメータ
表141-20 INVALIDATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
無効化するオブジェクトのID番号。 これは |
|
|
|
このパラメータはオプションです。デフォルト値はゼロ(フラグなし)です。INVALIDATEによってサポートされるオプション・フラグです。
|
例外
表141-21 INVALIDATEプロシージャの例外
例外 | 説明 |
---|---|
|
|
|
コンパイラの設定が |
|
|
使用上の注意
p_object_id
によって指定されるオブジェクトのオブジェクト・タイプ(ALL_OBJECTS
のobject_type
列)は、PROCEDURE
、FUNCTION
、PACKAGE
、PACKAGE
BODY
、TRIGGER
、TYPE
、TYPE
BODY
、LIBRARY
、VIEW
、OPERATOR
、SYNONYM
またはJAVA
CLASS
である必要があります。 オブジェクトがこれらのタイプの1つでなく、p_option_flags
にフラグinv_error_on_restrictions
が指定されている場合は、例外inv_restricted_object
が発生します。そうでない場合は、何も実行されません。
p_object_id
によって指定されるオブジェクトがSTANDARD
のパッケージ仕様部、DBMS_STANDARD
のパッケージ仕様部、あるいはDBMS_UTILITY
のパッケージ仕様部または本体であり、p_option_flags
にフラグinv_error_on_restrictions
が指定されている場合は、例外inv_restricted_object
が発生します。そうでない場合は、何も実行されません。
p_object_id
によって指定されるオブジェクトがオブジェクト・タイプ仕様部であり、そのタイプに依存する表が存在し、p_option_flags
にフラグinv_error_on_restrictions
が指定されている場合は、例外inv_restricted_object
が発生します。そうでない場合は、何も実行されません。
例
例1
DBMS_UTILITY.INVALIDATE (1232, 'PLSQL_OPTIMIZE_LEVEL = 2 REUSE SETTINGS');
object_id
1232がHR
スキーマのremove_emp
プロシージャを参照するとします。 この場合、前述のコールはremove_empプロシージャを無効とマークし、そのPLSQL_OPTIMIZE_LEVEL
コンパイラ設定を2に変更します。REUSE
SETTINGS
が指定されているため、他のコンパイラ設定の値は変更されません。
hr
.remove_emp
に依存するオブジェクトも無効とマークされます。これらのコンパイラのパラメータは変更されません。
例2
DBMS_UTILITY.INVALIDATE (40775, 'plsql_code_type = native');
object_id
40775がOE
スキーマのタイプ本体leaf_category_typ
を参照するとします。 この場合、前述のコールは、このタイプ本体を無効とマークし、そのPLSQL_CODE_TYPE
コンパイラ設定をNATIVE
に変更します。REUSE
SETTINGS
が指定されているため、他のコンパイラ設定の値は現行のセッション環境から取得されます。
本体に依存できるオブジェクトはないため、無効化の伝達はありません。
例3
DBMS_UTILITY.INVALIDATE (40796);
object_id
40796がOE
スキーマのビューoc_orders
を参照するとします。 この場合、前述のコールはoc_orders
ビューを無効とマークします。
oe
.oc_orders
に依存するオブジェクトも無効とマークされます。
このファンクションは、このデータベースがクラスタ・データベース・モードで実行されているかどうかを検出します。
構文
DBMS_UTILITY.IS_CLUSTER_DATABASE RETURN BOOLEAN;
戻り値
インスタンスがクラスタ・データベース・モードで起動されている場合はTRUE
を戻し、それ以外の場合はFALSE
を戻します。
このファンクションは、ファイル番号とブロック番号を指定したデータ・ブロック・アドレスを作成します。データ・ブロック・アドレスは、データベース内のブロックを識別するために使用する内部構造です。このファンクションは、データ・ブロック・アドレスを含んだ特定の固定表にアクセスするときに役立ちます。
構文
DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS ( file NUMBER, block NUMBER) RETURN NUMBER;
パラメータ
表141-22 MAKE_DATA_BLOCK_ADDRESSファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ブロックを含むファイル。 |
|
ブロック増分値に基づくファイル内でのブロックのオフセット。 |
プラグマ
pragma restrict_references (make_data_block_address, WNDS, RNDS, WNPS, RNPS);
戻り値
データ・ブロック・アドレス。
このプロシージャは、指定した名前を解決します。必要に応じてシノニム変換と認可チェックが含まれます。
構文
DBMS_UTILITY.NAME_RESOLVE ( name IN VARCHAR2, context IN NUMBER, schema OUT VARCHAR2, part1 OUT VARCHAR2, part2 OUT VARCHAR2, dblink OUT VARCHAR2, part1_type OUT NUMBER, object_number OUT NUMBER);
パラメータ
表141-23 NAME_RESOLVEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクト名。 この名前はフォーム[[a.]b.]c[@d]で指定します。a、b、cはSQL識別子、dはDBリンクです。DBリンクでは、構文チェックは実行されません。DBリンクが指定されている場合や名前がDBリンクの一部に変換される場合、オブジェクトは解決されませんが、 a、bおよびcは、デリミタ付き識別子の場合があり、グローバリゼーション・サポート(NLS)文字(シングルおよびマルチバイト)を含む場合があります。 |
|
0から9の範囲の整数を指定します。
|
|
オブジェクトのスキーマ。 |
|
名前の最初の部分。 この名前のタイプは、 |
|
|
|
このパラメータが |
|
|
|
オブジェクト識別子。 |
例外
すべてのエラーは、例外を呼び出すことによって処理されます。オブジェクト名の指定時に起こり得る各種の構文エラーに基づいて、広範囲にわたる例外が用意されています。
このプロシージャは、パーサーをコールして、"a [. b [. c ]][@ dblink ]"と指定した名前を解析します。二重引用符を削除するか、または引用符がない場合は大文字に変換します。ソートに関するすべてのコメントは無視し、意味的な分析は行いません。不明な値はNULL
のまま残ります。
構文
DBMS_UTILITY.NAME_TOKENIZE ( name IN VARCHAR2, a OUT VARCHAR2, b OUT VARCHAR2, c OUT VARCHAR2, dblink OUT VARCHAR2, nextpos OUT BINARY_INTEGER);
パラメータ
各a
、b
、c
およびdblink
は、それぞれのanext
、bnext
、cnext
、dnext
の次のトークンが開始される場所を示します。
このファンクションは、SYS_CONTEXT
('USERENV
', 'CURRENT_SCHEMA
')によって戻されたセッション値を戻します。
構文
DBMS_UTILITY.OLD_CURRENT_SCHEMA RETURN VARCHAR2;
このファンクションは、SYS_CONTEXT
('USERENV
', 'CURRENT_USER
')によって戻されたセッション値を戻します。
構文
DBMS_UTILITY.OLD_CURRENT_USER RETURN VARCHAR2;
このファンクションは、オペレーティング・システムと、TWO
TASK
PROTOCOL
バージョンのデータベースを識別する文字列を戻します。 たとえば、VAX/VMX-7
.1
.0
.0
が戻ります。
最大長はポート固有の長さです。
構文
DBMS_UTILITY.PORT_STRING RETURN VARCHAR2;
プラグマ
pragma restrict_references(port_string, WNDS, RNDS, WNPS, RNPS);
このファンクションは、SQL IDをハッシュ値に変換します。
構文
DBMS_UTILITY.SQLID_TO_SQLHASH ( sql_id IN VARCHAR2) RETURN NUMBER;
パラメータ
これらのプロシージャは、名前のPL/SQL表を、カンマで区切られた名前のリストに変換します。 PL/SQL表を1..n
に変換してn+1
null
で終了します。2番目のバージョンでは、完全修飾属性名をサポートしています。
構文
DBMS_UTILITY.TABLE_TO_COMMA ( tab IN UNCL_ARRAY, tablen OUT BINARY_INTEGER, list OUT VARCHAR2); DBMS_UTILITY.TABLE_TO_COMMA ( tab IN lname_array, tablen OUT BINARY_INTEGER, list OUT VARCHAR2);
パラメータ
表141-25 TABLE_TO_COMMAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表名のリストを含んだPL/SQL表。 |
|
PL/SQL表にある表の数。 |
|
表名のカンマで区切られたリスト。 |
戻り値
カンマで区切られたリストおよび表内で検出された要素の数。
このプロシージャは、無効なデータベース・オブジェクトを有効にします。
構文
DBMS_UTILITY.VALIDATE( object_id NUMBER); DBMS_UTILITY.VALIDATE( owner VARCHAR2, objname VARCHAR2, namespace NUMBER, edition_name := SYS_CONTEXT ('USERENV', 'CURRENT_EDITION'));
パラメータ
表141-26 VALIDATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトを所有するユーザーの名前。 |
|
検証するオブジェクトの名前。 |
|
オブジェクトのネームスペース。
|
|
[注意: 現在は操作できません。 将来使用するために予約されています。] |
使用上の注意
オブジェクトが、存在しないか、すでに有効か、検証不可能な場合、エラーは発生しません。
検証されるオブジェクトが指定したエディションに実在しない場合、サブプログラムは検証前にオブジェクトが実在するエディションに自動的に切り替わります。つまり、VALIDATEをコールしても、指定したエディションではオブジェクトは実体化されません。
INVALIDATEプロシージャはデータベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。 無効化するオブジェクトはそのobject_id
で指定します。無効化の前に、サブプログラムは自動的にオブジェクトが実在するエディションに切り替わります。つまり、INVALIDATE
をコールしても、現行のエディションではオブジェクトは実体化されません。