ヘッダーをスキップ
Oracle® TimesTen In-Memory Database PL/SQLパッケージ・リファレンス
リリース11.2.1
B63042-01
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

7 DBMS_UTILITY

DBMS_UTILITYパッケージは、各種のユーティリティ・サブプログラムを提供します。

この章の内容は次のとおりです。


DBMS_UTILITYの使用


セキュリティ・モデル

DBMS_UTILITYは、NAME_RESOLVEプロシージャおよびCOMPILE_SCHEMAプロシージャのコール・ユーザーの権限で実行されます。これは、SQLが正しく動作するために必要です。

このパッケージは、SYSとして実行されません。


定数

DBMS_UTILITYパッケージでは、表7-1に示す定数が使用されます。

表7-1 DBMS_UTILITYの定数

名前 説明

INV_ERROR_ON_RESTRICTIONS

BINARY_INTEGER

1

この定数は、INVALIDATEサブプログラムのp_option_flagsパラメータに対して唯一有効な値です。



注意:

  • PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このマニュアルでは、(表タイプ、レコードタイプ、サブプログラム・パラメータ、サブプログラム戻り値などの)参照情報のデータ・タイプを示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

  • INTEGERデータ・タイプおよびNUMBER(38)データ・タイプも同じです。このマニュアルでは、全体をとおしてINTEGERを使用します。



タイプ

dblink_array

TYPE dblink_array IS TABLE OF VARCHAR2(128) INDEX BY BINARY_INTEGER;

データベース・リンクのリストは、ここに格納されます。(TimesTenはdblinkをサポートしません。)

index_table_type

TYPE index_table_type IS TABLE OF BINARY_INTEGER INDEX BY BINARY_INTEGER;

オブジェクトの生成順序は、ここに戻されます。

instance_record

  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は稠密です。

lname_array

TYPE lname_array IS TABLE OF VARCHAR2(4000) index by BINARY_INTEGER;

完全修飾属性名を含むlong NAMEのリストは、ここに格納されます。

name_array

TYPE name_array IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;

NAMEのリストは、ここに格納されます。

number_array

TYPE number_array IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;

オブジェクトの生成順序は、ここに戻されます。

uncl_array

TYPE uncl_array IS TABLE OF VARCHAR2(227) INDEX BY BINARY_INTEGER;

"USER"."NAME"."COLUMN"@LINKのリストは、ここに格納されます。


例外

次の表に、DBMS_UTILITYで発生する例外を示します。

表7-2 DBMS_UTILITYで発生する例外

例外 エラー・コード 説明

INV_NOT_EXIST_OR_NO_PRIV

-24237

object_id引数がNULLまたは無効な値の場合、あるいは無効化されているオブジェクトのCREATE権限をコール元が持っていない場合に、INVALIDATEサブプログラムによって発行されます。

INV_MALFORMED_SETTINGS

-24238

コンパイラの設定がp_plsql_object_settingsパラメータで複数回指定された場合に、INVALIDATEサブプログラムによって発行されます。

INV_RESTRICTED_OBJECT

-24239

p_object_idパラメータに関連する条件の様々な組合せが互いに矛盾する場合に、INVALIDATEサブプログラムによって発行されます。



DBMS_UTILITYサブプログラムの要約

表7-3 DBMS_UTILITYパッケージのサブプログラム

サブプログラム 説明

CANONICALIZEプロシージャ


指定した文字列を正規化します。

COMMA_TO_TABLEプロシージャ


カンマで区切られた名前のリストを、名前のPL/SQL表に変換します。

COMPILE_SCHEMAプロシージャ


指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージおよびビューをコンパイルします。

DB_VERSIONプロシージャ


データベースに関するバージョン情報を戻します。

TimesTenはシステム・パラメータCOMPATIBLEをサポートしていないため、互換性設定にNULLを戻します。

FORMAT_CALL_STACKファンクション


現行のコール・スタックをフォーマットします。

FORMAT_ERROR_BACKTRACEファンクション


現行のエラーのポイントから、エラーが捕捉された例外ハンドラまでのバックトレースをフォーマットします。

FORMAT_ERROR_STACKファンクション


現行のエラー・スタックをフォーマットします。

GET_CPU_TIMEファンクション


現在のCPU時間を100分の1秒単位で戻します。

GET_DEPENDENCYプロシージャ


渡されたオブジェクトの依存関係を示します。

GET_ENDIANNESSファンクション


データベース・プラットフォームのエンディアンを戻します。

GET_HASH_VALUEファンクション


指定した文字列についてハッシュ値を計算します。

GET_SQL_HASHファンクション


MD5アルゴリズムを使用して、指定した文字列についてハッシュ値を計算します。

GET_TIMEファンクション


現在の時間を100分の1秒単位で検出します。

INVALIDATEプロシージャ


データベース・オブジェクトを無効化し、オプションでそのPL/SQLコンパイラのパラメータ設定を変更します。

IS_BIT_SETファンクション


ビットの設定を戻します。

NAME_RESOLVEプロシージャ


指定されたフォームの名前を解決します。

[[a.]b.]c[@dblink]

abおよびcはSQL識別子で、dblinkはdblinkです。

@dblinkは使用しないでください。TimesTenはデータベース・リンクをサポートしていません。

NAME_TOKENIZEプロシージャ


指定した名前を解析するパーサーをコールします。

'a[.b[.c]][@dblink]"

abおよびcはSQL識別子で、dblinkはdblinkです。二重引用符を削除するか、または引用符がない場合は大文字に変換します。コメントは無視し、意味的な分析は行いません。不明な値はNULLになります。

@dblinkは使用しないでください。TimesTenはデータベース・リンクをサポートしていません。

TABLE_TO_COMMAプロシージャ


名前のPL/SQL表を、カンマで区切られた名前のリストに変換します。

VALIDATEプロシージャ


所有者、名前および名前空間、またはオブジェクトIDで記述されたオブジェクトを検証します。



CANONICALIZEプロシージャ

このプロシージャは、指定した文字列を正規化します。このプロシージャは単一の予約語またはキーワード("table"など)を処理し、単一の識別子の空白を取り除きます。たとえば、" table"はTABLEになります。

構文

DBMS_UTILITY.CANONICALIZE(
   name           IN    VARCHAR2,
   canon_name     OUT   VARCHAR2,
   canon_len      IN    BINARY_INTEGER);

パラメータ

表7-4 CANONICALIZEプロシージャのパラメータ

パラメータ 説明

name

正規化する文字列。

canon_name

正規化された文字。

canon_len

正規化する文字列の長さ(バイト単位)。


戻り値

canon_nameの先頭のcanon_lenバイトを戻します。

使用上の注意


COMMA_TO_TABLEプロシージャ

このプロシージャは、名前のカンマ区切りリストを名前の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プロシージャのパラメータ

パラメータ 説明

list

名前のカンマ区切りリストで、名前には1番目のバージョンのプロシージャについて次の形式が必要です。

a[.b[.c]][@d]

または、2番目のプロシージャの場合は、次の形式となります。

a[.b]*

abcおよびdは、単純な識別子です(引用符あり、または引用符なし)。

tablen

PL/SQL表にある表の数。

tab

名前のリストを含むPL/SQL表。


戻り値

1..nを持つPL/SQL表で、n+1NULLです。

使用上の注意

listは、空ではないカンマで区切られたリストであることが必要です。カンマ区切りのリスト以外の場合は拒否されます。二重引用符内のカンマは無視されます。

カンマで区切られたリストに、マルチバイト・キャラクタを含めることはできません。

tabにある値は、変換されずに元のリストからコピーされます。


COMPILE_SCHEMAプロシージャ

このプロシージャは、指定したスキーマ内にあるすべてのプロシージャ、ファンクション、パッケージおよびビューをコンパイルします。

構文

DBMS_UTILITY.COMPILE_SCHEMA (
   schema          IN VARCHAR2,
   compile_all     IN BOOLEAN DEFAULT TRUE,
   reuse_settings  IN BOOLEAN DEFAULT FALSE);

パラメータ

表7-6 COMPILE_SCHEMAプロシージャのパラメータ

パラメータ 説明

schema

スキーマの名前。

compile_all

TRUEに設定すると、ステータスがVALIDであるかどうかに関係なく、スキーマ内のすべてをコンパイルします。

FALSEに設定すると、ステータスがINVALIDのオブジェクトのみをコンパイルします。

reuse_settings

オブジェクトのセッション設定を再利用するかどうか、または現在のセッション設定を採用するかどうかを指定します。


使用上の注意

例外

表7-7 COMPILE_SCHEMAプロシージャの例外

例外 説明

ORA-20000

このスキーマ内のいずれかのオブジェクトに対して権限が不十分です。

ORA-20001

SYSオブジェクトを再コンパイルできません。

ORA-20002

最大反復数を超えています。一部のオブジェクトが再コンパイルされていない可能性があります。



DB_VERSIONプロシージャ

このプロシージャは、データベースに関するバージョン情報を戻します。

TimesTenはシステム・パラメータCOMPATIBLEをサポートしていないため、互換性設定にNULLを戻します。

構文

DBMS_UTILITY.DB_VERSION (
   version       OUT VARCHAR2,
   compatibility OUT VARCHAR2); 

パラメータ

表7-8 DB_VERSIONプロシージャのパラメータ

パラメータ 説明

version

データベースの内部ソフトウェア・バージョンを表す文字列(例: 7.1.0.0.0)。

この文字列の長さは可変なので、データベース・バージョンによって決定されます。

compatibility

データベースの互換性設定。

TimesTenの場合、システム・パラメータCOMPATIBLEをサポートしていないため、DB_VERSIONは互換性設定でNULLを戻します。



FORMAT_CALL_STACKファンクション

このファンクションは、現行のコール・スタックをフォーマットします。これは、任意のストアド・プロシージャを使用してコール・スタックにアクセスでき、デバッグに役立ちます。

構文

DBMS_UTILITY.FORMAT_CALL_STACK 
  RETURN VARCHAR2;

戻り値

最大2000バイトまでのコール・スタックを戻します。


FORMAT_ERROR_BACKTRACEファンクション

このプロシージャは、有効範囲外の例外ハンドラからコールされた場合でも、例外が発生したポイントのコール・スタックを表示します。出力は、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.

FORMAT_ERROR_STACKファンクション

このファンクションは、現行のエラー・スタックをフォーマットします。これは、全エラー・スタックを表示するための例外ハンドラで使用できます。

構文

DBMS_UTILITY.FORMAT_ERROR_STACK 
  RETURN VARCHAR2;

戻り値

最大2000バイトまでのエラー・スタックを戻します。エラーが現在処理されていない場合は、null文字列が戻されます。


GET_CPU_TIMEファンクション

このファンクションは、任意の時点からの現在のCPU時間を100分の1秒単位で戻します。

構文

  DBMS_UTILITY.GET_CPU_TIME
   RETURN NUMBER;

戻り値

任意の時点からの100分の1秒の数。

使用上の注意

このサブプログラムは、作業の実行に使用されるサイクル(CPU時間)をレポートするもので、クロック時間またはその他の固定参照とは無関係です。ベースラインは基準となる線であり、実行される作業と生成される数の関係はオペレーティング・システムに固有であるため、実行された作業の量は、特定の操作の開始ポイントと終了ポイントの差分を測定することによって計算されます。


GET_DEPENDENCYプロシージャ

このプロシージャは、渡されたオブジェクトの依存関係を示します。

構文

  DBMS_UTILITY.GET_DEPENDENCY
   type      IN     VARCHAR2,
   schema    IN     VARCHAR2,
   name      IN     VARCHAR2);

パラメータ

表7-9 GET_DEPENDENCYプロシージャのパラメータ

パラメータ 説明

type

オブジェクトのタイプ。たとえば、オブジェクトが表の場合は、タイプを"TABLE"と指定します。

schema

オブジェクトのスキーマ名。

name

オブジェクトの名前。


使用上の注意

このプロシージャは、DBMS_OUTPUTパッケージを使用して結果を表示するため、依存性を表示する場合は、SET SERVEROUTPUT ONを宣言する必要があります。また、DBMS_OUTPUT出力バッファをチェックするアプリケーションでこのサブプログラムを起動し、GET_LINESなどのDBMS_OUTPUTサブプログラムを使用して出力を取得することもできます。


GET_ENDIANNESSファンクション

このファンクションは、データベース・プラットフォームのエンディアンを示します。

構文

  DBMS_UTILITY.GET_ENDIANNESS
   RETURN NUMBER;

戻り値

データベース・プラットフォームのエンディアンを示すNUMBER値(big-endianの場合は1、little-endianの場合は2)。


GET_HASH_VALUEファンクション

このファンクションは、指定した文字列についてハッシュ値を計算します。

構文

DBMS_UTILITY.GET_HASH_VALUE (
   name      IN  VARCHAR2, 
   base      IN  NUMBER, 
   hash_size IN  NUMBER)
  RETURN NUMBER;

パラメータ

表7-10 GET_HASH_VALUEファンクションのパラメータ

パラメータ 説明

name

ハッシュする文字列。

base

戻されるハッシュ値が始まるベース値。

hash_size

必要とするハッシュ表のサイズ。


戻り値

ハッシュ値は、入力文字列に基づいています。たとえば、ハッシュ値が1000から3047の範囲にある文字列についてハッシュ値を取得するには、ベース値として1000、hash_size値として2048を使用します。hash_sizeに2の累乗を使用すると動作が最適になります。


GET_SQL_HASHファンクション

このファンクションは、MD5アルゴリズムを使用して、指定した文字列についてハッシュ値を計算します。

構文

DBMS_UTILITY.GET_SQL_HASH (
   name          IN   VARCHAR2,
  [hash          OUT  RAW,
   pre10ihash    OUT  NUMBER])
  RETURN NUMBER;

パラメータ

表7-11 GET_SQL_HASHプロシージャのパラメータ

パラメータ 説明

name

ハッシュする文字列。

hash

戻されるハッシュ値の16バイトすべてを格納するフィールド(オプション)。

pre10ihash

10gより前のデータベース・バージョンのハッシュ値を格納するフィールド(オプション)。


戻り値

ハッシュ値(最後の4バイト)は、入力文字列に基づいています。MD5ハッシュ・アルゴリズムでは16バイトのハッシュ値が計算されますが、TimesTenは実際の数値を戻すことができるように最後の4バイトのみを戻します。オプションのRAWパラメータを使用し、16バイトすべてを取得して、Oracle 10gより前の4バイトのハッシュ値をオプションのpre10ihashパラメータに格納できます。


GET_TIMEファンクション

このファンクションは、現在の時間を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つ目の(後の)数が正であることも許可される必要があります。


INVALIDATEプロシージャ

このプロシージャは、データベース・オブジェクトを無効化し、オプションでその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プロシージャのパラメータ

パラメータ 説明

p_object_id

無効化するオブジェクトのID番号。これは、ALL_OBJECTSOBJECT_ID列の値と同じです。p_object_id引数がNULLまたは無効な値の場合は、例外inv_not_exist_or_no_privが発生します。このプロシージャのコール元は、無効化されるオブジェクトのCREATE権限を持っている必要があり、そうでない場合は、例外inv_not_exist_or_no_privが発生します。

p_plsql_object_settings

p_object_idで指定されたオブジェクトがPL/SQLオブジェクトでない場合、このオプションのパラメータは無視されます。このパラメータに値を指定しないと、PL/SQLコンパイラの設定は変更されず、REUSE SETTINGSと同じになります。値を指定した場合は、1つ以上の空白で区切られたPL/SQLコンパイラ設定の値を指定する必要があります。設定が複数回指定された場合は、例外inv_malformed_settingsが発生します。設定値は、p_object_idで指定したオブジェクトに関してのみ変更され、無効化されている可能性のある依存オブジェクトには影響しません。設定名および設定値では、大/小文字は区別されません。設定を省略し、REUSE SETTINGSを指定した場合、このライブラリ・ユニットの以前のコンパイルでのコンパイラ設定で値が指定されていると、TimesTenは以前の値を使用します。設定を省略し、REUSE SETTINGSを指定しなかったか、または以前のコンパイルでパラメータを指定していなかった場合、データベースはセッション環境からこの設定のための値を取得します。

p_option_flags

このパラメータはオプションで、デフォルト値はゼロ(フラグなし)です。INVALIDATEによってサポートされるオプション・フラグです。

  • inv_error_on_restrictions(「定数」を参照): このサブプログラムは、無効化が可能なオブジェクトに様々な制限を課します。たとえば、p_object_idによって指定されたオブジェクトは表にできません。デフォルトでは、これらの条件に対してINVALIDATEが暗黙的に戻されます(例外は発生しません)。コール元がこのフラグを設定した場合は、例外inv_restricted_objectが発生します。


使用上の注意

p_object_idによって指定されるオブジェクトのオブジェクト・タイプ(ALL_OBJECTSobject_type列)は、PROCEDUREFUNCTIONPACKAGEPACKAGE BODYLIBRARYOPERATORまたは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の例外

例外 説明

INV_NOT_EXIST_OR_NO_PRIV

object_id引数がNULLまたは無効な値の場合、あるいは無効化されているオブジェクトのCREATE権限をコール元が持っていない場合に発生します。

INV_MALFORMED_SETTINGS

コンパイラの設定がp_plsql_object_settingsパラメータで複数回指定された場合に発生します。

INV_RESTRICTED_OBJECT

p_object_idパラメータに関連する条件の様々な組合せが互いに矛盾する場合に発生します。


この例は、「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_NaiveP5をコールすると仮定すると、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 PROCEDUREALTER FUNCTIONまたはALTER PACKAGEを実行して、明示的にオブジェクトを再コンパイルおよび再検証できます。また、各オブジェクトは、次に実行されるときに自動的に再コンパイルおよび再検証されます。


IS_BIT_SETファンクション

このファンクションは、指定のRAW値の指定のビットについて、ビット設定をチェックします。

構文

DBMS_UTILITY.IS_BIT_SET (
   r       IN RAW,    
   n       IN NUMBER)  
  RETURN NUMBER;

パラメータ

表7-14 IS_BIT_SETプロシージャのパラメータ

パラメータ 説明

r

ソースRAW。

n

チェックするrのビット。


戻り値

RAW rにビットnが設定されている場合、このファンクションは1を戻します。ビットは大きい方から小さい方に番号付けされ、最小ビットはビット番号1です。


NAME_RESOLVEプロシージャ

このプロシージャは、指定したフォームの名前を解決します。

[[a.]b.]c[@dblink]

abおよび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プロシージャのパラメータ

パラメータ 説明

name

オブジェクト名。これはフォームで指定します。

[[a.]b.]c[@dblink]

abおよびcはSQL識別子で、dblinkはdblinkです。TimesTenはdblinkをサポートしません。dblinkでは、構文チェックは実行されません。dblinkが指定されている場合や名前がdblinkの一部に変換される場合、オブジェクトは解決されませんが、schemapart1part2およびdblink OUTの各パラメータには値が入力されます。

abおよびcエントリは、デリミタ付き識別子の場合があり、グローバリゼーション・サポート(NLS)文字(シングルおよびマルチバイト)を含む場合があります。

context

0から9の範囲の整数を指定します。

  • 0: 表

  • 1: PL/SQL(2つの部分の名前の場合)

  • 2: 順序

  • 3: トリガー(TimesTenには適用されない)

  • 4: Javaソース(TimesTenには適用されない)

  • 5: Javaリソース(TimesTenには適用されない)

  • 6: Javaクラス(TimesTenには適用されない)

  • 7: タイプ(TimesTenには適用されない)

  • 8: Java共有データ(TimesTenには適用されない)

  • 9: 索引

schema

オブジェクトのスキーマ: cnameにスキーマが指定されていない場合、schemaは、名前を解決することによって決定されます。

part1

名前の最初の部分。この名前のタイプは、part1_typeに指定されます(シノニムまたはパッケージ)。

part2

null以外の場合、これがサブプログラム名となります。part1がnull以外の場合、このサブプログラムはpart1が示すパッケージ内に配置されます。part1がnullの場合、このサブプログラムはトップ・レベルのサブプログラムになります。

dblink

これがnull以外の場合、データベース・リンクは、nameの一部として指定されたか、またはnameがデータベース・リンクの一部に変換されるシノニムとして指定されたかのいずれかです。名前変換がさらに必要な場合は、このリモート・ノードでNAME_RESOLVEをコールする必要があります。

TimesTenは、データベース・リンクをサポートしていません。

part1_type

part1のタイプは、次のとおりです。

  • 5: シノニム

  • 7: プロシージャ(トップレベル)

  • 8: ファンクション(トップレベル)

  • 9: パッケージ

object_number

オブジェクト識別子。


例外

すべてのエラーは、例外を呼び出すことによって処理されます。オブジェクト名の指定時に起こり得る各種の構文エラーに基づいて、広範囲にわたる例外が用意されています。


NAME_TOKENIZEプロシージャ

このプロシージャは、次のように入力名を解析するパーサーをコールします。

"a[.b[.c]][@dblink]"

abおよび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プロシージャのパラメータ

パラメータ 説明

name

SQL識別子で構成される入力名(scott.fooなど)。

a

名前の1番目のトークンに対応する出力。

b

名前の2番目のトークンに対応する出力(該当する場合)。

c

名前の3番目のトークンに対応する出力(該当する場合)。

dblink

名前のdblinkに対応する出力。これはTimesTenでは使用されません。

nextpos

入力名解析後の次の位置。


次のスクリプトを検討します。

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.

TABLE_TO_COMMAプロシージャ

このプロシージャは、名前の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プロシージャのパラメータ

パラメータ 説明

tab

表名のリストを含むPL/SQL表。

tablen

PL/SQL表にある表の数。

list

表のカンマ区切りリスト。


戻り値

カンマ区切りリストのVARCHAR2値と、表で検出された要素の数。


VALIDATEプロシージャ

所有者、名前および名前空間、またはオブジェクト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プロシージャのパラメータ

パラメータ 説明

owner

オブジェクトを所有するユーザーの名前。ALL_OBJECTSOWNERフィールドと同じです。

objname

検証するオブジェクトの名前。ALL_OBJECTSOBJECT_NAMEフィールドと同じです。

namespace

オブジェクトのネームスペース。obj$namespaceフィールドと同じです。同等の数値は次のとおりです。

  • 1: 表またはプロシージャ

  • 2: 本文

  • 3: トリガー(TimesTenには適用されない)

  • 4: 索引

  • 5: クラスタ

  • 8: LOB(TimesTenには適用されない)

  • 9: ディレクトリ

  • 10: キュー

  • 11: レプリケーション・オブジェクト・グループ

  • 12: レプリケーション・プロパゲータ

  • 13: Javaソース(TimesTenには適用されない)

  • 14: Javaリソース(TimesTenには適用されない)

  • 58: モデル(データ・マイニング)

edition_name

今後の使用のため予約済です。


使用上の注意

この例は、「INVALIDATEプロシージャ」INVALIDATE例の続きです。次に示すように、P5Top_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_LoggingP5をコールするため、これを検証すると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.