DBMS_UTILITY
パッケージは、各種のユーティリティ・サブプログラムを提供します。
この章の内容は次のとおりです。
セキュリティ・モデル
定数
タイプ
例外
DBMS_UTILITY
は、NAME_RESOLVEプロシージャおよびCOMPILE_SCHEMAプロシージャのコール・ユーザーの権限で実行されます。これは、SQLが正しく動作するために必要です。
このパッケージは、SYS
として実行されません。
DBMS_UTILITY
パッケージでは、表7-1に示す定数が使用されます。
表7-1 DBMS_UTILITYの定数
名前 | 型 | 値 | 説明 |
---|---|---|---|
|
|
|
この定数は、 |
注意:
|
TYPE dblink_array IS TABLE OF VARCHAR2(128) INDEX BY BINARY_INTEGER;
データベース・リンクのリストは、ここに格納されます。(TimesTenはdblinkをサポートしません。)
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
で発生する例外を示します。
表7-2 DBMS_UTILITYで発生する例外
例外 | エラー・コード | 説明 |
---|---|---|
|
-24237 |
|
|
-24238 |
コンパイラの設定が |
|
-24239 |
|
表7-3 DBMS_UTILITYパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
指定した文字列を正規化します。 |
|
カンマで区切られた名前のリストを、名前のPL/SQL表に変換します。 |
|
指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージおよびビューをコンパイルします。 |
|
データベースに関するバージョン情報を戻します。 TimesTenはシステム・パラメータ |
|
現行のコール・スタックをフォーマットします。 |
|
現行のエラーのポイントから、エラーが捕捉された例外ハンドラまでのバックトレースをフォーマットします。 |
|
現行のエラー・スタックをフォーマットします。 |
|
現在のCPU時間を100分の1秒単位で戻します。 |
|
渡されたオブジェクトの依存関係を示します。 |
|
データベース・プラットフォームのエンディアンを戻します。 |
|
指定した文字列についてハッシュ値を計算します。 |
|
MD5アルゴリズムを使用して、指定した文字列についてハッシュ値を計算します。 |
|
現在の時間を100分の1秒単位で検出します。 |
|
データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。 |
|
ビットの設定を戻します。 |
|
指定されたフォームの名前を解決します。 [[a.]b.]c[@dblink]
|
|
指定した名前を解析するパーサーをコールします。 'a[.b[.c]][@dblink]"
|
|
名前のPL/SQL表を、カンマで区切られた名前のリストに変換します。 |
|
所有者、名前および名前空間、またはオブジェクトIDで記述されたオブジェクトを検証します。 |
このプロシージャは、指定した文字列を正規化します。このプロシージャは単一の予約語またはキーワード("table
"など)を処理し、単一の識別子の空白を取り除きます。たとえば、" table
"はTABLE
になります。
構文
DBMS_UTILITY.CANONICALIZE( name IN VARCHAR2, canon_name OUT VARCHAR2, canon_len IN BINARY_INTEGER);
パラメータ
表7-4 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 dbms_utility.uncl_array); DBMS_UTILITY.COMMA_TO_TABLE ( list IN VARCHAR2, tablen OUT BINARY_INTEGER, tab OUT dbms_utility.lname_array);
パラメータ
表7-5 COMMA_TO_TABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
名前のカンマ区切りリストで、名前には1番目のバージョンのプロシージャについて次の形式が必要です。 a[.b[.c]][@d] または、2番目のプロシージャの場合は、次の形式となります。 a[.b]*
|
|
PL/SQL表にある表の数。 |
|
名前のリストを含むPL/SQL表。 |
戻り値
値1..
n
を持つPL/SQL表で、n
+1
はNULL
です。
使用上の注意
list
は、空ではないカンマで区切られたリストであることが必要です。カンマ区切りのリスト以外の場合は拒否されます。二重引用符内のカンマは無視されます。
カンマで区切られたリストに、マルチバイト・キャラクタを含めることはできません。
tab
にある値は、変換されずに元のリストからコピーされます。
このプロシージャは、指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージおよびビューをコンパイルします。
構文
DBMS_UTILITY.COMPILE_SCHEMA ( schema IN VARCHAR2, compile_all IN BOOLEAN DEFAULT TRUE, reuse_settings IN BOOLEAN DEFAULT FALSE);
パラメータ
表7-6 COMPILE_SCHEMAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
スキーマの名前。 |
|
|
|
オブジェクトのセッション設定を再利用するかどうか、または現在のセッション設定を採用するかどうかを指定します。 |
使用上の注意
このサブプログラムは、UTL_RECOMP
パッケージのRECOMP_SERIALプロシージャのラッパーであることに注意してください。
このプロシージャのコール後、ステータスがINVALID
の項目をビューALL_OBJECTS
から選択して、すべてのオブジェクトが正常にコンパイルされたかどうかを調べます。
ttIsql
のshow errors
コマンドを使用すると、無効なオブジェクトに関連するエラーを表示できます。
Command> show errors [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY} [schema.]name];
例:
Command> show errors function foo; Command> show errors procedure fred.bar; Command> show errors package body emp_actions;
例外
表7-7 COMPILE_SCHEMAプロシージャの例外
例外 | 説明 |
---|---|
|
このスキーマ内のいずれかのオブジェクトに対して権限が不十分です。 |
|
|
|
最大反復数を超えています。一部のオブジェクトが再コンパイルされていない可能性があります。 |
このプロシージャは、データベースに関するバージョン情報を戻します。
TimesTenはシステム・パラメータCOMPATIBLE
をサポートしていないため、互換性設定にNULL
を戻します。
構文
DBMS_UTILITY.DB_VERSION ( version OUT VARCHAR2, compatibility OUT VARCHAR2);
パラメータ
表7-8 DB_VERSIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
データベースの内部ソフトウェア・バージョンを表す文字列(例: 7.1.0.0.0)。 この文字列の長さは可変なので、データベース・バージョンによって決定されます。 |
|
データベースの互換性設定。 TimesTenの場合、システム・パラメータ |
このファンクションは、現行のコール・スタックをフォーマットします。これは、任意のストアド・プロシージャを使用してコール・スタックにアクセスでき、デバッグに役立ちます。
構文
DBMS_UTILITY.FORMAT_CALL_STACK RETURN VARCHAR2;
戻り値
最大2000バイトまでのコール・スタックを戻します。
このプロシージャは、有効範囲外の例外ハンドラからコールされた場合でも、例外が発生したポイントのコール・スタックを表示します。出力は、SQLERRM
ファンクションの出力と似ていますが、サイズ制限が異なります。
構文
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE RETURN VARCHAR2;
戻り値
バックトレース文字列。エラーが現在処理されていない場合は、null文字列が戻されます。
スクリプトformat_error_backtrace.sql
run
コマンドを使用して、ttIsql
から次のスクリプトを実行します。
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; / 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
Top_Naiveの実行
これは、スクリプトで作成されたTop_Naive
プロシージャの実行結果を示しており、ユーザーSCOTT
がスクリプトを実行してから、プロシージャを実行したと想定しています。
Command> set serveroutput on Command> begin > Top_Naive(); > end; > / 8507: ORA-01476: divisor is equal to zero 8507: ORA-06512: at "SCOTT.P0", line 4 8507: ORA-06512: at "SCOTT.P1", line 3 8507: ORA-06512: at "SCOTT.P2", line 3 8507: ORA-06512: at "SCOTT.P3", line 3 8507: ORA-06512: at "SCOTT.P4", line 3 8507: ORA-06512: at "SCOTT.P5", line 3 8507: ORA-06512: at "SCOTT.TOP_NAIVE", line 3 8507: ORA-06512: at line 2 The command failed.
この出力は、例外が発生したポイントのコール・スタックを示しています。これは、SCOTT.P0
の行4で発生した未処理の例外ORA-01476
で始まり、SCOTT.Top_Naive
の行3に戻される、展開済のコール・スタックとしてのバックトレース・エラー・メッセージを示しています。
Top_With_Loggingの実行
これは、スクリプトで作成されたTop_With_Logging()
プロシージャの実行結果を示しており、ユーザーSCOTT
がスクリプトを実行してから、プロシージャを実行したと想定しています。
Command> begin > Top_With_Logging(); > end; > / Error_Stack... ORA-01476: divisor is equal to zero Error_Backtrace... ORA-06512: at "SCOTT.P0", line 4 ORA-06512: at "SCOTT.P1", line 3 ORA-06512: at "SCOTT.P2", line 3 ORA-06512: at "SCOTT.P3", line 3 ORA-06512: at "SCOTT.P4", line 3 ORA-06512: at "SCOTT.P5", line 3 ORA-06512: at "SCOTT.TOP_WITH_LOGGING", line 6 ---------- PL/SQL procedure successfully completed.
この出力は、例外が発生したポイントのコール・スタックを示しています。これは、SCOTT.P0
の行4で発生した未処理の例外ORA-01476
で始まり、SCOTT.Top_With_Logging
の行6に戻される、展開済のコール・スタックとしてのバックトレース・エラー・メッセージを示しています。
ORA-06512の情報
『Oracle Databaseエラー・メッセージ』では、ORA-06512
エラーについて次の情報が示されています。
ORA-06512: at stringline string 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 DBA.
このファンクションは、現行のエラー・スタックをフォーマットします。これは、全エラー・スタックを表示するための例外ハンドラで使用できます。
構文
DBMS_UTILITY.FORMAT_ERROR_STACK RETURN VARCHAR2;
戻り値
最大2000バイトまでのエラー・スタックを戻します。エラーが現在処理されていない場合は、null文字列が戻されます。
このファンクションは、任意の時点からの現在の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);
パラメータ
表7-9 GET_DEPENDENCYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトのタイプ。たとえば、オブジェクトが表の場合は、タイプを"TABLE"と指定します。 |
|
オブジェクトのスキーマ名。 |
|
オブジェクトの名前。 |
使用上の注意
このプロシージャは、DBMS_OUTPUT
パッケージを使用して結果を表示するため、依存性を表示する場合は、SET SERVEROUTPUT ON
を宣言する必要があります。また、DBMS_OUTPUT
出力バッファをチェックするアプリケーションでこのサブプログラムを起動し、GET_LINES
などのDBMS_OUTPUT
サブプログラムを使用して出力を取得することもできます。
このファンクションは、データベース・プラットフォームのエンディアンを示します。
構文
DBMS_UTILITY.GET_ENDIANNESS RETURN NUMBER;
戻り値
データベース・プラットフォームのエンディアンを示すNUMBER
値(big-endianの場合は1、little-endianの場合は2)。
このファンクションは、指定した文字列についてハッシュ値を計算します。
構文
DBMS_UTILITY.GET_HASH_VALUE ( name IN VARCHAR2, base IN NUMBER, hash_size IN NUMBER) RETURN NUMBER;
パラメータ
表7-10 GET_HASH_VALUEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ハッシュする文字列。 |
|
戻されるハッシュ値が始まるベース値。 |
|
必要とするハッシュ表のサイズ。 |
戻り値
ハッシュ値は、入力文字列に基づいています。たとえば、ハッシュ値が1000から3047の範囲にある文字列についてハッシュ値を取得するには、ベース値として1000、hash_size
値として2048を使用します。hash_size
に2の累乗を使用すると動作が最適になります。
このファンクションは、MD5アルゴリズムを使用して、指定した文字列についてハッシュ値を計算します。
構文
DBMS_UTILITY.GET_SQL_HASH ( name IN VARCHAR2, [hash OUT RAW, pre10ihash OUT NUMBER]) RETURN NUMBER;
パラメータ
表7-11 GET_SQL_HASHプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ハッシュする文字列。 |
|
戻されるハッシュ値の16バイトすべてを格納するフィールド(オプション)。 |
|
10gより前のデータベース・バージョンのハッシュ値を格納するフィールド(オプション)。 |
戻り値
ハッシュ値(最後の4バイト)は、入力文字列に基づいています。MD5ハッシュ・アルゴリズムでは16バイトのハッシュ値が計算されますが、TimesTenは実際の数値を戻すことができるように最後の4バイトのみを戻します。オプションのRAW
パラメータを使用し、16バイトすべてを取得して、Oracle 10gより前の4バイトのハッシュ値をオプションのpre10ihash
パラメータに格納できます。
このファンクションは、現在の時間を100分の1秒単位で特定し、主に経過時間を確認するために使用されます。サブプログラムは、2回(プロセスの開始時と終了時)コールされます。2つ目の(後の)数から1つ目の(先の)数を引くことで経過時間を判別します。
構文
DBMS_UTILITY.GET_TIME RETURN NUMBER;
戻り値
サブプログラムが起動された時点からの時間の数(100分の1秒単位)。
使用上の注意
プラットフォームおよびシステムに応じて、-2,147,483,648から2,147,483,647の範囲の数が戻されるため、アプリケーションによる間隔の判別では、数に付加される記号(マイナス記号)を考慮する必要があります。たとえば2つの数が負である場合、アプリケーション・ロジックで、1つ目の(先の)数が、よりゼロに近い2つ目の(後の)数よりも大きいことが許可される必要があります。同様に、アプリケーションでは、1つ目の(先の)数が負で2つ目の(後の)数が正であることも許可される必要があります。
このプロシージャは、データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。また、無効化されるオブジェクトに直接的または間接的に依存するすべてのオブジェクトも無効化します。
構文
DBMS_UTILITY.INVALIDATE ( p_object_id IN NUMBER, [p_plsql_object_settings IN VARCHAR2 DEFAULT NULL, p_option_flags BINARY_INTEGER DEFAULT 0]);
パラメータ
表7-12 INVALIDATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
無効化するオブジェクトのID番号。これは、 |
|
|
|
このパラメータはオプションで、デフォルト値はゼロ(フラグなし)です。INVALIDATEによってサポートされるオプション・フラグです。
|
使用上の注意
p_object_id
によって指定されるオブジェクトのオブジェクト・タイプ(ALL_OBJECTS
のobject_type
列)は、PROCEDURE
、FUNCTION
、PACKAGE
、PACKAGE BODY
、LIBRARY
、OPERATOR
またはSYNONYM
である必要があります。オブジェクトがこれらのタイプのいずれでもなく、p_option_flags
にフラグinv_error_on_restrictions
が指定されている場合は、例外inv_restricted_object
が発生します。このような状況でinv_error_on_restrictions
が指定されていない場合、何も実行されません。
p_object_id
によって指定されるオブジェクトがSTANDARD
のパッケージ仕様部、DBMS_STANDARD
のパッケージ仕様部、あるいはDBMS_UTILITY
のパッケージ仕様部または本体であり、p_option_flags
にフラグinv_error_on_restrictions
が指定されている場合は、例外inv_restricted_object
が発生します。このような状況でinv_error_on_restrictions
が指定されていない場合、何も実行されません。
p_object_id
によって指定されるオブジェクトがオブジェクト・タイプ仕様部であり、そのタイプに依存する表が存在し、p_option_flags
にフラグinv_error_on_restrictions
が指定されている場合は、例外inv_restricted_object
が発生します。inv_error_on_restrictions
が指定されていない場合は、何も実行されません。
例外
表7-13 INVALIDATEの例外
例外 | 説明 |
---|---|
|
|
|
コンパイラの設定が |
|
|
この例は、「FORMAT_ERROR_BACKTRACEファンクション」の例で作成したプロシージャを無効化します。user_objects
を調べると、その例で作成されたプロシージャの情報を確認できます。次はuser_objects
を示しており、その内容を問い合せています。
Command> describe user_objects; View SYS.USER_OBJECTS: Columns: OBJECT_NAME VARCHAR2 (30) INLINE SUBOBJECT_NAME VARCHAR2 (30) INLINE OBJECT_ID TT_BIGINT NOT NULL DATA_OBJECT_ID TT_BIGINT OBJECT_TYPE VARCHAR2 (17) INLINE NOT NULL CREATED DATE NOT NULL LAST_DDL_TIME DATE NOT NULL TIMESTAMP VARCHAR2 (78) INLINE NOT NULL STATUS VARCHAR2 (7) INLINE NOT NULL TEMPORARY VARCHAR2 (1) INLINE NOT NULL GENERATED VARCHAR2 (1) INLINE NOT NULL SECONDARY VARCHAR2 (1) INLINE NOT NULL NAMESPACE TT_INTEGER NOT NULL EDITION_NAME VARCHAR2 (30) INLINE 1 view found. Command> select * from user_objects; ... < LOG_ERRORS, <NULL>, 296, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12 :58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> > < P0, <NULL>, 297, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> > < P1, <NULL>, 298, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> > < P2, <NULL>, 299, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> > < P3, <NULL>, 300, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> > < P4, <NULL>, 301, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> > < P5, <NULL>, 302, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> > < TOP_NAIVE, <NULL>, 303, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12: 58:22, 2009-09-18:12:58:22, VALID, N, N, N, 1, <NULL> > < TOP_WITH_LOGGING, <NULL>, 304, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09 -18 15:19:16, 2009-09-18:15:19:16, VALID, N, N, N, 1, <NULL> > ... 20 rows found.
たとえば、P5
プロシージャを無効化するには、INVALIDATE
コールでobject_id
302を指定します。
Command> begin > dbms_utility.invalidate(302, 'PLSQL_OPTIMIZE_LEVEL=2 REUSE SETTINGS'); > end; > /
これは、P5
プロシージャを無効とマーク付けし、そのPLSQL_OPTIMIZE_LEVEL
コンパイラ設定に2を設定します。REUSE SETTINGS
が指定されているため、他のコンパイラ設定の値は変更されません。P5
が無効化されることに加え、そのオブジェクトを参照するPL/SQLオブジェクトも無効化されます。Top_With_Logging
およびTop_Naive
がP5
をコールすると仮定すると、INVALIDATE
コールの結果は次のようになり、現在無効なすべてのユーザー・オブジェクトを問い合せます。
Command> select * from user_objects where status='INVALID'; < P5, <NULL>, 302, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22, 2009-09-18:12:58:22, INVALID, N, N, N, 1, <NULL> > < TOP_NAIVE, <NULL>, 303, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12: 58:22, 2009-09-18:12:58:22, INVALID, N, N, N, 1, <NULL> > < TOP_WITH_LOGGING, <NULL>, 304, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09 -18 15:19:16, 2009-09-18:15:19:16, INVALID, N, N, N, 1, <NULL> > 3 rows found.
ユーザーは、この章の後半で説明するVALIDATE
プロシージャをコールするか、必要に応じて、オブジェクトに対してALTER PROCEDURE
、ALTER FUNCTION
またはALTER PACKAGE
を実行して、明示的にオブジェクトを再コンパイルおよび再検証できます。また、各オブジェクトは、次に実行されるときに自動的に再コンパイルおよび再検証されます。
このファンクションは、指定のRAW
値の指定のビットについて、ビット設定をチェックします。
構文
DBMS_UTILITY.IS_BIT_SET ( r IN RAW, n IN NUMBER) RETURN NUMBER;
パラメータ
戻り値
RAW
r
にビットn
が設定されている場合、このファンクションは1を戻します。ビットは大きい方から小さい方に番号付けされ、最小ビットはビット番号1です。
このプロシージャは、指定したフォームの名前を解決します。
[[a.]b.]c[@dblink]
a
、b
およびc
はSQL識別子、dblink
はdblinkであり、必要に応じてシノニム変換と認可チェックが含まれます。
@
dblink
は使用しないでください。TimesTenはデータベース・リンクをサポートしていません。
構文
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);
パラメータ
表7-15 NAME_RESOLVEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクト名。これはフォームで指定します。 [[a.]b.]c[@dblink]
|
|
0から9の範囲の整数を指定します。
|
|
オブジェクトのスキーマ: |
|
名前の最初の部分。この名前のタイプは、 |
|
null以外の場合、これがサブプログラム名となります。 |
|
これがnull以外の場合、データベース・リンクは、 TimesTenは、データベース・リンクをサポートしていません。 |
|
|
|
オブジェクト識別子。 |
例外
すべてのエラーは、例外を呼び出すことによって処理されます。オブジェクト名の指定時に起こり得る各種の構文エラーに基づいて、広範囲にわたる例外が用意されています。
このプロシージャは、次のように入力名を解析するパーサーをコールします。
"a[.b[.c]][@dblink]"
a
、b
およびc
はSQL識別子で、dblink
はdblinkです。二重引用符を削除するか、または引用符がない場合は大文字に変換します。ソートに関するすべてのコメントは無視し、意味的な分析は行いません。不明な値はNULL
のまま残ります。
@
dblink
は使用しないでください。TimesTenはデータベース・リンクをサポートしていません。
構文
DBMS_UTILITY.NAME_TOKENIZE ( name IN VARCHAR2, a OUT VARCHAR2, b OUT VARCHAR2, c OUT VARCHAR2, dblink OUT VARCHAR2, nextpos OUT BINARY_INTEGER);
パラメータ
表7-16 NAME_TOKENIZEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SQL識別子で構成される入力名( |
|
名前の1番目のトークンに対応する出力。 |
|
名前の2番目のトークンに対応する出力(該当する場合)。 |
|
名前の3番目のトークンに対応する出力(該当する場合)。 |
|
名前のdblinkに対応する出力。これはTimesTenでは使用されません。 |
|
入力名解析後の次の位置。 |
例
次のスクリプトを検討します。
declare a varchar2(30); b varchar2(30); c varchar2(30); d varchar2(30); next integer; begin dbms_utility.name_tokenize('scott.foo', a, b, c, d, next); dbms_output.put_line('a: ' || a); dbms_output.put_line('b: ' || b); dbms_output.put_line('c: ' || c); dbms_output.put_line('d: ' || d); dbms_output.put_line('next: ' || next); end; /
次の出力が生成されます。
a: SCOTT b: FOO c: d: next: 9 PL/SQL procedure successfully completed.
このプロシージャは、名前のPL/SQL表を名前のカンマ区切りリストに変換します。PL/SQL表を1..n
に変換し、n
+1をNULL
にして終了します。2番目のバージョンでは、完全修飾属性名をサポートしています。
構文
DBMS_UTILITY.TABLE_TO_COMMA ( tab IN dbms_utility.uncl_array, tablen OUT BINARY_INTEGER, list OUT VARCHAR2); DBMS_UTILITY.TABLE_TO_COMMA ( tab IN dbms_utility.lname_array, tablen OUT BINARY_INTEGER, list OUT VARCHAR2);
パラメータ
表7-17 TABLE_TO_COMMAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
表名のリストを含むPL/SQL表。 |
|
PL/SQL表にある表の数。 |
|
表のカンマ区切りリスト。 |
戻り値
カンマ区切りリストのVARCHAR2
値と、表で検出された要素の数。
所有者、名前および名前空間、またはオブジェクトIDで記述されたオブジェクトを検証します。
構文
DBMS_UTILITY.VALIDATE( object_id IN NUMBER); DBMS_UTILITY.VALIDATE( owner IN VARCHAR2, objname IN VARCHAR2, namespace NUMBER, edition_name VARCHAR2 := NULL;
パラメータ
表7-18 VALIDATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトを所有するユーザーの名前。 |
|
検証するオブジェクトの名前。 |
|
オブジェクトのネームスペース。
|
|
今後の使用のため予約済です。 |
使用上の注意
サブプログラムでVALIDATE
を実行すると、そのサブプログラムが参照しているサブプログラムも検証されます。(次の例を参照。)
オブジェクトが、存在しないか、すでに有効か、検証不可能な場合、エラーは発生しません。
INVALIDATEプロシージャはデータベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。無効化するオブジェクトはそのobject_id
値で指定します。
この例は、「INVALIDATEプロシージャ」のINVALIDATE
例の続きです。次に示すように、P5
、Top_Naive
およびTop_With_Logging
が無効化されています。
Command> select * from user_objects where status='INVALID'; < P5, <NULL>, 302, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12:58:22, 2009-09-18:12:58:22, INVALID, N, N, N, 1, <NULL> > < TOP_NAIVE, <NULL>, 303, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-18 12: 58:22, 2009-09-18:12:58:22, INVALID, N, N, N, 1, <NULL> > < TOP_WITH_LOGGING, <NULL>, 304, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09 -18 15:19:16, 2009-09-18:15:19:16, INVALID, N, N, N, 1, <NULL> > 3 rows found.
たとえば、Top_With_Logging
はP5
をコールするため、これを検証するとP5
も検証されます(Top_Naive
を無効にしておくだけです)。
Command> begin > dbms_utility.validate(304); > end; > / PL/SQL procedure successfully completed. Command> select * from user_objects where status='INVALID'; < TOP_NAIVE, <NULL>, 303, <NULL>, PROCEDURE, 2009-09-18 12:53:45, 2009-09-21 11: 14:37, 2009-09-21:11:14:37, INVALID, N, N, N, 1, <NULL> > 1 row found.