ヘッダーをスキップ
Oracle® TimesTen In-Memory Database PL/SQLパッケージ・リファレンス
11gリリース2 (11.2.2)
B66725-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 DBMS_UTILITY

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

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


DBMS_UTILITYの使用


セキュリティ・モデル

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

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


定数

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

表8-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で発生する例外を示します。

表8-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サブプログラムの要約

表8-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ファンクション


RAW値の指定したビットの設定をチェックします。

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);

パラメータ

表8-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);

パラメータ

表8-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);

パラメータ

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

パラメータ 説明

schema

スキーマの名前。

compile_all

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

ステータスがINVALIDのオブジェクトのみをコンパイルするには、FALSE

reuse_settings

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


使用上の注意

例外

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

例外 説明

ORA-20000

このスキーマ内のいずれかのオブジェクトに対する権限が不十分な場合に発生します。

ORA-20001

SYSオブジェクトをコンパイルできない場合に発生します。

ORA-20002

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



DB_VERSIONプロシージャ

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

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

第9章「TT_DB_VERSION」も参照してください。

構文

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

パラメータ

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

パラメータ 説明

version

データベースの内部ソフトウェア・バージョンを表す文字列(例: 11.2.2.1.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;
/

-- Define and raise an exception to view backtrace. 
-- See "EXCEPTION_INIT Pragma" in Oracle Database PL/SQL Language Reference.

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秒単位で戻します。2つのコールから戻される時間の差では、(合計経過時間ではなく)2つのポイント間のCPUの処理時間が測定されます。

別の目的がある「GET_TIMEファンクション」も参照してください。

構文

  DBMS_UTILITY.GET_CPU_TIME
   RETURN NUMBER;

戻り値

任意のポイントからのCPU処理時間(100分の1秒単位)

使用上の注意

このサブプログラムは、作業の実行に使用されるサイクル(CPU時間)をレポートするもので、クロック時間またはその他の固定参照とは無関係です。常に正の値が戻されます。実行された作業の量は、各ポイントでGET_CPU_TIMEコールを使用して、特定の操作の開始ポイントと終了ポイントの差分を測定することによって計算されます。


GET_DEPENDENCYプロシージャ

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

構文

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

パラメータ

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

パラメータ 説明

type

オブジェクトのタイプ。

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

schema

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

name

オブジェクトの名前。


使用上の注意

このプロシージャは、DBMS_OUTPUTパッケージを使用して結果を表示するため、依存性を表示する場合は、ttIsqlから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;

パラメータ

表8-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;

パラメータ

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

パラメータ 説明

name

ハッシュする文字列。

hash

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

pre10ihash

10gより前のOracle Databaseバージョンのハッシュ値を格納するフィールド(オプション)


戻り値

入力文字列に基づくハッシュ値(最後の4バイト)

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


GET_TIMEファンクション

このファンクションは、現在の時間の測定値を100分の1秒単位で戻します。2つのコールから戻される時間の差では、(CPU処理時間のみではなく)2つのポイント間の合計経過時間が測定されます。

別の目的がある「GET_CPU_TIMEファンクション」も参照してください。

構文

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]);

パラメータ

表8-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

デフォルト値がゼロ(フラグなし)のオプション・パラメータ

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が指定されていない場合は、何も実行されません。

例外

表8-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;

パラメータ

表8-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);

パラメータ

表8-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

オブジェクトのスキーマ、c

nameにスキーマが指定されていない場合、schemaは、名前を解決することによって決定されます。

part1

名前の最初の部分

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

part2

サブプログラム名(適切な場合)またはNULL

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

dblink

なし

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);

パラメータ

表8-16 NAME_TOKENIZEプロシージャのパラメータ

パラメータ 説明

name

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

a

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

b

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

c

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

dblink

名前のdblinkに対応する出力(TimesTenにはありません)

nextpos

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


ttIsqlで次のスクリプトを実行することを検討します。

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);

パラメータ

表8-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;

パラメータ

表8-18 VALIDATEプロシージャのパラメータ

パラメータ 説明

object_id

有効化するオブジェクトのID番号

オブジェクトIDの詳細は、「INVALIDATEプロシージャ」を参照してください。

owner

オブジェクトを所有するユーザーの名前

ALL_OBJECTSOWNERフィールドと同じです。

objname

検証するオブジェクトの名前

ALL_OBJECTSOBJECT_NAMEフィールドと同じです。

namespace

オブジェクトのネームスペース

obj$namespaceフィールドと同じです。同等の数値は次のとおりです。

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

  • 2 - 本文

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

  • 4 - 索引

  • 5 - クラスタ

  • 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.