ヘッダーをスキップ
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス
11g リリース1(11.1)
E05686-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

43 DBMS_DEBUG

DBMS_DEBUGは、OracleサーバーにおけるPL/SQLデバッガ・レイヤー、プローブに対するPL/SQLインタフェースです。

このAPIは、主にサーバー側のデバッガを実装することを目的としており、サーバー側のPL/SQLプログラム・ユニットをデバッグする方法を提供します。


注意:

プログラム・ユニットという用語は、各種のPL/SQLプログラム(プロシージャ、ファンクション、パッケージ、パッケージ本体、トリガー、無名ブロック、オブジェクト・タイプまたはオブジェクト・タイプ本体)のことを指します。

この章では、次の項目について説明します。


DBMS_DEBUGの使用方法


概要

サーバー側のコードをデバッグするには、2つのデータベース・セッションが必要です。1つはコードをデバッグ・モードで実行するセッション(ターゲット・セッション)、他の1つはそのターゲット・セッションを監視するセッション(デバッグ・セッション)です。

ターゲット・セッションは、DBMS_DEBUGで初期化コールを行うことでデバッグ可能になります。この結果、そのセッションにマークが付けられるため、PL/SQLインタプリタがデバッグ・モードで実行され、デバッグ・イベントが生成されます。デバッグ・イベントが生成されると、それらはセッションから転送されます。ほとんどの場合、デバッグ・イベントには戻り通知が必要です。インタプリタは応答があるまで一時停止します。

この間に、デバッグ・セッション自体はDBMS_DEBUGを使用して初期化する必要があります。これにより、監視するターゲット・セッションが識別されます。 次に、デバッグ・セッションはDBMS_DEBUGのエントリポイントをコールして、ターゲット・セッションから転送されたイベントを読み込み、ターゲット・セッションと通信します。

次のサブプログラムは、ターゲット・セッション(デバッグ対象のセッション)で実行されます。

DBMS_DEBUGは、PL/SQLコンパイラへのインタフェースは提供しませんが、コンパイラがオプションで生成するデバッグ情報には依存します。デバッグ情報がないと、パラメータまたは変数の値の検証や変更を実行できません。


定数

ブレーク・ポイントの状態には次の値があります。

ブレーク・ポイントが使用されている場合、状態は次の値のマスクになります。


変数

DBMS_DEBUGでは、表43-1に示す変数が使用されます。

表43-1 DBMS_DEBUGの変数

変数 説明

default_timeout

タイムアウトの値(両方のセッションが使用します)。最小許容値は1秒です。この値が0(ゼロ)に設定された場合は、大きい値(3600)が使用されます。



例外

この値は、デバッグ・セッション(SYNCHRONIZECONTINUESET_BREAKPOINTなど)でコールされる様々なファンクションによって戻されます。PL/SQL例外がクライアント/サーバーおよびサーバー/サーバーの境界を越えて発生した場合は、すべて例外となり、エラー・コードは戻されません。

説明
success 正常終了

GET_VALUEおよびSET_VALUEによって戻されるステータスは次のとおりです。

ステータス 説明
error_bogus_frame 該当するエントリポイントがスタックにありません。
error_no_debug_info プログラムがデバッグ記号なしにコンパイルされました。
error_no_such_object 該当する変数またはパラメータがありません。
error_unknown_type デバッグ情報を読み取れません。
error_indexed_table オブジェクトが表で、索引が提供されていない場合にGET_VALUEで戻されます。
error_illegal_index 該当する要素がコレクション内に存在しません。
error_nullcollection 表がアトミックNULLです。
error_nullvalue 値がNULLです。

SET_VALUEによって戻されるステータスは次のとおりです。

ステータス 説明
error_illegal_value 制約違反。
error_illegal_null 制約違反。
error_value_malformed 指定された値を解読できません。
error_other その他のエラー。
error_name_incomplete 名前をスカラーに変換できません。

ブレーク・ポイント・ファンクションによって戻されるステータスは次のとおりです。

ステータス 説明
error_no_such_breakpt 該当するブレーク・ポイントがありません。
error_idle_breakpt 未使用のブレーク・ポイントは使用可能または使用禁止にできません。
error_bad_handle 指定されたプログラムにブレーク・ポイントを設定できません(存在していないか、またはセキュリティ違反です)。

一般的なエラー・コード(多数のDBMS_DEBUGサブプログラムが戻す)は次のとおりです。

ステータス 説明
error_unimplemented 機能が実装されていません。
error_deferred プログラムが実行されていません。操作は延期されました。
error_exception サーバー上のDBMS_DEBUGまたはプローブ・パッケージで例外が発生しました。
error_communication タイムアウト以外のエラーが発生しました。
error_timeout タイムアウトが発生しました。

例外 説明
illegal_init INITIALIZEの前にDEBUG_ONがコールされました。

次の例外は、プロシージャSELF_CHECKによって発生します。

例外 説明
pipe_creation_failure パイプを作成できませんでした。
pipe_send_failure パイプにデータを書き込めませんでした。
pipe_receive_failure パイプからデータを読み込めませんでした。
pipe_datatype_mismatch パイプ内のデータ型が正しくありませんでした。
pipe_data_error データがパイプ内で混同されていました。


使用上の注意

デバッグ情報の生成を確認する方法は2通りあります。セッション・スイッチを使用する方法と、個別に再コンパイルする方法です。

セッション・スイッチを設定するには、次の文を入力します。

ALTER SESSION SET PLSQL_DEBUG = true;

この文によって、コンパイラはセッションの残りの部分に関するデバッグ情報を生成します。既存のPL/SQLは再コンパイルしません。

既存のPL/SQLコードのデバッグ情報を生成するには、次の文のいずれかを使用します(2番目の文はパッケージまたはタイプの本体を再コンパイルします)。

ALTER [PROCEDURE | FUNCTION | PACKAGE | TRIGGER | TYPE] <name> COMPILE DEBUG;
ALTER [PACKAGE | TYPE] <name> COMPILE DEBUG BODY;

図43-1および図43-2に、デバッグ対象のセッションおよびデバッグ・セッションでの操作のフローを示します。

図43-1 ターゲット・セッション

図43-1の説明が続きます
「図43-1 ターゲット・セッション」の説明

図43-2 デバッグ・セッション

図43-2の説明が続きます
「図43-2 デバッグ・セッション」の説明

図43-3 デバッグ・セッション(続き)

図43-3の説明が続きます
「図43-3 デバッグ・セッション(続き)」の説明

インタプリタの管理

インタプリタは、次の場合に実行を一時停止します。

  1. インタプリタの起動時。実行前に、遅延ブレーク・ポイントをインストールできるようにするため。

  2. 使用可能なブレーク・ポイントを含んだ行に達したとき。

  3. 関連のあるイベントが発生した行に達したとき。 関連イベントのセットは、breakflagsパラメータのDBMS_DEBUG.CONTINUEに渡されるフラグで指定します。

セッションの終了

セッション終了のイベントはありません。したがって、ターゲット・セッションが終了していないことを、デバッグ・セッションでチェックして確認する必要があります。 ターゲット・セッションが終了した後にDBMS_DEBUG.SYNCHRONIZEをコールすると、タイムアウトするまでデバッグ・セッションがハングアップします。

遅延操作

図では、ターゲット・セッションの前にブレーク・ポイントを設定できることが示されています。これは確かに可能です。この場合、プローブはブレーク・ポイント要求をキャッシュして、最初の同期でターゲット・セッションに送信します。ただし、ブレーク・ポイント要求がこのように遅延した場合は次のようになります。

診断出力

プローブをデバッグするために、DBMS_DEBUGのコールの一部に対してdiagnosticsパラメータが用意されています。これらのパラメータは、RDBMSトレース・ファイルに診断出力を格納するかどうかを指定します。RDBMSトレース・ファイルに出力できない場合、このパラメータは無効になります。

共通セクションおよびデバッグ・セッション・セクション

共通セクション

次に示すサブプログラムは、ターゲットまたはデバッグ・セッションのいずれでもコールできます。


ターゲット・セッション

次のサブプログラムは、ターゲット・セッションでのみコールできます。


デバッグ・セッション・セクション

次のサブプログラムは、デバッグ・セッションでのみ実行してください。


OERブレーク・ポイント

PL/SQLプログラム内で宣言される例外は、ユーザー定義の例外として認識されています。この他に、Oracleカーネルから戻されるOracleエラー(OER)があります。 この2つのメカニズムを結合するために、PL/SQLはユーザー定義の例外をOERに変換するexception_initプラグマを提供しています。この処理にはPL/SQLハンドラが使用され、PL/SQLエンジンは、OERをOracleカーネルに戻すことができます。現行のリリースでは、OERに関する使用可能な情報はその番号のみです。 2つのユーザー定義例外が同じOERにexception_initされると、区別できません。

ネームスペース

サーバー上のプログラム・ユニットは、異なるネームスペースに常駐しています。ブレーク・ポイントの設定時には、希望するネームスペースを指定してください。

  1. Namespace_cursorにはカーソル(無名ブロック)が含まれています。

  2. Namespace_pgkspec_or_toplevelには次が含まれています。

    • パッケージ仕様部

    • 他のパッケージ、プロシージャまたはファンクション内にネストされていないプロシージャおよびファンクション

    • オブジェクト・タイプ

  3. Namespace_pkg_bodyにはパッケージ本体およびタイプ本体が含まれています。

  4. Namespace_triggerにはトリガーが含まれています。

Libunitタイプ

この値は、特定のネームスペースのオブジェクトを一意化するために使用されます。 これらの定数は、プローブがスタックのバックトレースを提供しているときに、PROGRAM_INFOで使用されます。

ブレーク・フラグ

この値は、クライアントに関連のあるイベントをプローブに通知するために、CONTINUEに対するbreakflagsパラメータで使用されます。これらのフラグは結合できます。

説明
break_next_line 次のソース行でブレークします(コールをスキップ)。
break_any_call 次のソース行でブレークします(コールを開始)。
break_any_return 現行のエントリポイントから戻された後ブレーク(現行のルーチンからコールされたエントリポイントはすべてスキップ)します。
break_return 次回のエントリポイントが戻し処理の準備ができた時点でブレークします。(現行のエントリポイントからコールされたエントリポイントが含まれます。 インタプリタがProc2をコールするProc1を実行している場合、break_returnProc2の終了時に停止します。)
break_exception 例外が発生したときにブレークします。
break_handler 例外ハンドラが実行されたときにブレークします。
abort_execution 実行を停止し、DBMS_DEBUG.CONTINUEがコールされるとすぐに、'exit'イベントを強制的に実行します。

情報フラグ

このフラグは、info_requestedパラメータとしてSYNCHRONIZECONTINUEおよびGET_RUNTIME_INFOに渡されます。

フラグ 説明
info_getStackDepth スタックの現在の深さを取得します。
info_getBreakpoint ブレーク・ポイント数を取得します。
info_getLineinfo プログラム・ユニット情報を取得します。

中断理由

CONTINUEの実行後、プログラムは最後まで実行されるか、または途中の行でブレークします。

理由 説明
reason_none -
reason_interpreter_starting インタプリタは起動中です。
reason_breakpoint ブレーク・ポイントに到達しました。
reason_enter プロシージャ・エントリ。
reason_return プロシージャが戻ります。
reason_finish プロシージャが終了しました。
reason_line 改行に到達しました。
reason_interrupt 割込みが発生しました。
reason_exception 例外が発生しました。
reason_exit インタプリタは終了処理中です(旧形式)。
reason_knl_exit カーネルは終了処理中です。
reason_handler 例外ハンドラを起動します。
reason_timeout タイムアウトが発生しました。
reason_instantiate インスタンス化ブロック。
reason_abort インタプリタは異常終了中です。


データ構造

DBMS_DEBUGパッケージでは、レコード・タイプと表タイプを定義します。

レコード・タイプ

表タイプ


BREAKPOINT_INFOレコード・タイプ

このタイプは、ブレーク・ポイントに関して、現在の状態や配置されたプログラム・ユニットなどの情報を提供します。

構文

TYPE breakpoint_info IS RECORD (
   name        VARCHAR2(30),
   owner       VARCHAR2(30),
   dblink      VARCHAR2(30),
   line#       BINARY_INTEGER,
   libunittype BINARY_INTEGER,
   status      BINARY_INTEGER);

フィールド

表43-2 BREAKPOINT_INFOのフィールド

フィールド 説明

name

プログラム・ユニットの名前。

owner

プログラム・ユニットの所有者。

dblink

データベース・リンク(リモートの場合)。

line#

行番号。

libunittype

ネストされたプロシージャまたはファンクション以外はNULLです。

status

breakpoint_status_*の値については、「定数」を参照してください。



PROGRAM_INFOレコード・タイプ

このタイプはプログラムの位置を指定します。プログラム・ユニットの中の行番号を使用します。これは、スタックのバックトレース用およびブレーク・ポイントの設定と検査用に使用されます。読取り専用フィールドは、ブレーク・ポイント操作に関してプローブでは現在無視されています。スタックのバックトレース用のみにプローブが設定します。

構文

TYPE program_info IS RECORD(
    -- The following fields are used when setting a breakpoint
    namespace        BINARY_INTEGER,
    name             VARCHAR2(30),
    owner            VARCHAR2(30),
    dblink           VARCHAR2(30),
    line#            BINARY_INTEGER,
    -- Read-only fields (set by Probe when doing a stack backtrace)
    libunittype      BINARY_INTEGER,
    entrypointname   VARCHAR2(30));

フィールド

表43-3 PROGRAM_INFOのフィールド

フィールド 説明

namespace

「ネームスペース」を参照してください。

name

プログラム・ユニットの名前。

owner

プログラム・ユニットの所有者。

dblink

データベース・リンク(リモートの場合)。

line#

行番号。

libunittype

読取り専用フィールド。ネストされたプロシージャまたはファンクション以外はNULLです。

entrypointname

読取り専用フィールド。同じネームスペースを共有するオブジェクト(プロシージャやパッケージ仕様部など)を一意化します。

詳細は、「Libunitタイプ」を参照してください。



RUNTIME_INFOレコード・タイプ

このタイプは、実行プログラムに関するコンテキスト情報を提供します。

構文

TYPE runtime_info IS RECORD(
    line#            BINARY_INTEGER,
    terminated       binary_integer,
    breakpoint       binary_integer,
    stackdepth       BINARY_INTEGER,
    interpreterdepth BINARY_INTEGER,
    reason           BINARY_INTEGER,
    program          program_info);

フィールド

表43-4 RUNTIME_INFOのフィールド

フィールド 説明

line#

program.line#の複製

terminated

プログラムが終了しているかどうか

breakpoint

ブレーク・ポイント番号

stackdepth

スタック上のフレームの数

interpreterdepth

[予約フィールド]

reason

中断理由

program

ソースの場所



BACKTRACE_TABLE表タイプ

このタイプは、PRINT_BACKTRACEで使用されます。

構文

TYPE backtrace_table IS TABLE OF program_info INDEX BY BINARY_INTEGER;

BREAKPOINT_TABLE表タイプ

このタイプは、SHOW_BREAKPOINTSで使用されます。

構文

TYPE breakpoint_table IS TABLE OF breakpoint_info INDEX BY BINARY_INTEGER;

INDEX_TABLE表タイプ

このタイプは、索引表で使用可能な索引を戻すために、GET_INDEXESで使用されます。

構文

TYPE index_table IS table of BINARY_INTEGER INDEX BY BINARY_INTEGER;

VC2_TABLE表タイプ

このタイプは、SHOW_SOURCEで使用されます。

構文

TYPE vc2_table IS TABLE OF VARCHAR2(90) INDEX BY BINARY_INTEGER;

DBMS_DEBUGサブプログラムの要約

表43-5 DBMS_DEBUGパッケージのサブプログラム

サブプログラム 説明

ATTACH_SESSIONプロシージャ


デバッグ・セッションにターゲット・デバッグIDに関する情報を通知します。

CONTINUEファンクション


ターゲット・プログラムの実行を継続します。

DEBUG_OFFプロシージャ


デバッグ・モードをオフにします。

DEBUG_ONプロシージャ


デバッグ・モードをオンにします。

DELETE_BREAKPOINTファンクション


ブレーク・ポイントを削除します。

DELETE_OER_BREAKPOINTファンクション


OERブレーク・ポイントを削除します。

DETACH_SESSIONプロシージャ


ターゲット・プログラムのデバッグを停止します。

DISABLE_BREAKPOINTファンクション


ブレーク・ポイントを使用禁止にします。

ENABLE_BREAKPOINTファンクション


既存のブレーク・ポイントをアクティブにします。

EXECUTEプロシージャ


ターゲット・セッションでSQLまたはPL/SQLを実行します。

GET_INDEXESファンクション


索引表に対する一連の索引を戻します。

GET_MORE_SOURCEプロシージャ


SHOW_SOURCEの使用時に、バッファ・オーバーフローが起きたときに追加ソースを提供します。

GET_LINE_MAPファンクション


プログラム・ユニット内の行番号に関する情報を戻します。

GET_RUNTIME_INFOファンクション


現行のプログラムに関する情報を戻します。

GET_TIMEOUT_BEHAVIOURファンクション


現行のタイムアウト動作を戻します。

GET_VALUEファンクション


現在実行中のプログラムから値を取得します。

INITIALIZEファンクション


ターゲット・セッションのデバッグIDを設定します。

PINGプロシージャ


ターゲット・セッションがタイムアウトしないようにpingします。

PRINT_BACKTRACEプロシージャ


スタックのバックトレースを印刷します。

PRINT_INSTANTIATIONSプロシージャ


スタックのバックトレースを印刷します。

PROBE_VERSIONプロシージャ


サーバー上のDBMS_DEBUGのバージョン番号を戻します。

SELF_CHECKプロシージャ


内部一貫性チェックを実行します。

SET_BREAKPOINTファンクション


プログラム・ユニットにブレーク・ポイントを設定します。

SET_OER_BREAKPOINTファンクション


OERブレーク・ポイントを設定します。

SET_TIMEOUTファンクション


タイムアウト値を設定します。

SET_TIMEOUT_BEHAVIOURプロシージャ


タイムアウトの発生時に、ターゲット・セッションに行う処理をプローブに指示します。

SET_VALUEファンクション


現在実行中のプログラムに値を設定します。

SHOW_BREAKPOINTSプロシージャ


現行のブレーク・ポイントのリストを戻します。

SHOW_FRAME_SOURCEプロシージャ


フレーム・ソースをフェッチします。

SHOW_SOURCEプロシージャ


プログラム・ソースをフェッチします。

SYNCHRONIZEファンクション


プログラムの実行開始を待機します。

TARGET_PROGRAM_RUNNINGプロシージャ


ターゲット・セッションが現在ストアド・プロシージャを実行中の場合はTRUE、実行していない場合はFALSEを戻します。



ATTACH_SESSIONプロシージャ

このプロシージャは、ターゲット・プログラムに関する情報をデバッグ・セッションに通知します。

構文

DBMS_DEBUG.ATTACH_SESSION (
   debug_session_id  IN VARCHAR2,
   diagnostics       IN BINARY_INTEGER := 0);

パラメータ

表43-6 ATTACH_SESSIONプロシージャのパラメータ

パラメータ 説明

debug_session_id

ターゲット・セッションのINITIALIZEコールで取得したデバッグID。

diagnostics

0(ゼロ)以外の場合に診断出力を生成します。



CONTINUEファンクション

このファンクションは、所定のブレーク・フラグ(関連のあるイベントのマスク)をターゲット・プロセスのプローブに渡します。プローブに、ターゲット・プロセスの実行を継続するように通知し、ターゲット・プロセスが実行を終了するか、またはイベントを通知するまで待機します。

info_requestedNULLでない場合は、GET_RUNTIME_INFOをコールします。

構文

DBMS_DEBUG.CONTINUE (
   run_info       IN OUT runtime_info,
   breakflags     IN     BINARY_INTEGER,
   info_requested IN     BINARY_INTEGER := NULL)
  RETURN BINARY_INTEGER;

パラメータ

表43-7 CONTINUEファンクションのパラメータ

パラメータ 説明

run_info

プログラムの状態に関する情報。

breakflags

関連のあるイベントのマスク。詳細は、「ブレーク・フラグ」を参照してください。

info_requested

プログラムが停止したときに、run_infoに戻される必要のある情報。詳細は、「情報フラグ」を参照してください。


戻り値

表43-8 CONTINUEファンクションの戻り値

戻り値 説明

success


error_timeout

プログラムが実行を開始する前にタイムアウトしました。

error_communication

その他の通信エラー。



DEBUG_OFFプロシージャ


注意:

immediateがTRUEの場合、デバッグ・セッションは待機する必要があります。


このプロシージャは、そのセッションでデバッグを起動する必要がなくなったことをターゲット・セッションに通知します。セッションの終了前にこのファンクションをコールする必要はありません。

構文

DBMS_DEBUG.DEBUG_OFF;

使用上の注意

サーバーは、このエントリポイントを特別には処理しません。したがって、このエントリポイントをデバッグしようとします。


DEBUG_ONプロシージャ

このプロシージャは、すべてのPL/SQLがデバッグ・モードで実行されるように、ターゲット・セッションにマークを設定します。この処理は、デバッグの開始前に実行する必要があります。

構文

DBMS_DEBUG.DEBUG_ON (
   no_client_side_plsql_engine BOOLEAN := TRUE,
   immediate                   BOOLEAN := FALSE);

パラメータ

表43-9 DEBUG_ONプロシージャのパラメータ

パラメータ 説明

no_client_side_plsql_engine

デバッグ・セッションがクライアント側のPL/SQLエンジンから起動されていないかぎり、デフォルト値のままにしてください。

immediate

TRUEの場合、インタプリタは標準モードで処理を継続せずに、コール中にすぐにデバッグ・モードに切り替わります。



DELETE_BREAKPOINTファンクション

このファンクションはブレーク・ポイントを削除します。

構文

DBMS_DEBUG.DELETE_BREAKPOINT (
   breakpoint IN BINARY_INTEGER)
  RETURN BINARY_INTEGER;

パラメータ

表43-10 DELETE_BREAKPOINTファンクションのパラメータ

パラメータ 説明

breakpoint

以前のSET_BREAKPOINTコールから戻されたブレーク・ポイント番号


戻り値

表43-11 DELETE_BREAKPOINTファンクションの戻り値

戻り値 説明

success


error_no_such_breakpt

該当するブレーク・ポイントが存在しません。

error_idle_breakpt

未使用のブレーク・ポイントは削除できません。

error_stale_breakpt

ブレーク・ポイントが設定された後にプログラム・ユニットが再定義されました。



DELETE_OER_BREAKPOINTファンクション

このファンクションは、OERブレーク・ポイントを削除します。

構文

DBMS_DEBUG.DELETE_OER_BREAKPOINT (
   oer  IN PLS_INTEGER)
RETURN PLS_INTEGER;

パラメータ

表43-12 DELETE_OER_BREAKPOINTファンクションのパラメータ

パラメータ 説明

oer

OER(4バイトの正数)。



DETACH_SESSIONプロシージャ

このプロシージャは、ターゲット・プログラムのデバッグを停止します。このプロシージャはいつでもコール可能ですが、デバッグ・セッションの連結が解除されたことはターゲット・セッションに通知されず、ターゲット・セッションの実行は終了しません。したがって、ターゲット・セッションが独自にハングアップしないように注意してください。

構文

DBMS_DEBUG.DETACH_SESSION;

DISABLE_BREAKPOINTファンクション

このファンクションは、既存のブレーク・ポイントを使用禁止にしますが、削除しないでそのまま残します。

構文

DBMS_DEBUG.DISABLE_BREAKPOINT (
   breakpoint IN BINARY_INTEGER)
  RETURN BINARY_INTEGER;

パラメータ

表43-13 DISABLE_BREAKPOINTファンクションのパラメータ

パラメータ 説明

breakpoint

以前のSET_BREAKPOINTコールから戻されたブレーク・ポイント番号


戻り値

表43-14 DISABLE_BREAKPOINTファンクションの戻り値

戻り値 説明

success


error_no_such_breakpt

該当するブレーク・ポイントが存在しません。

error_idle_breakpt

未使用のブレーク・ポイントは使用禁止にできません。



ENABLE_BREAKPOINTファンクション

このファンクションは、使用禁止の逆の処理を実行します。以前に使用禁止にしたブレーク・ポイントを使用可能にします。

構文

DBMS_DEBUG.ENABLE_BREAKPOINT (
   breakpoint IN BINARY_INTEGER)
  RETURN BINARY_INTEGER;

パラメータ

表43-15 ENABLE_BREAKPOINTファンクションのパラメータ

パラメータ 説明

breakpoint

以前のSET_BREAKPOINTコールから戻されたブレーク・ポイント番号


戻り値

表43-16 ENABLE_BREAKPOINTファンクションの戻り値

戻り値 説明

success

成功。

error_no_such_breakpt

該当するブレーク・ポイントが存在しません。

error_idle_breakpt

未使用のブレーク・ポイントは使用可能にできません。



EXECUTEプロシージャ

このプロシージャは、ターゲット・セッションでSQLまたはPL/SQLコードを実行します。ターゲット・セッションは、ブレーク・ポイント(またはその他のイベント)で待機中であるとみなされます。 デバッグ・セッションでDBMS_DEBUG.EXECUTEがコールされ、ターゲット・セッションにコードの実行を要求します。

構文

DBMS_DEBUG.EXECUTE (
   what         IN VARCHAR2,
   frame#       IN BINARY_INTEGER,
   bind_results IN BINARY_INTEGER,
   results      IN OUT NOCOPY dbms_debug_vc2coll,
   errm         IN OUT NOCOPY VARCHAR2);

パラメータ

表43-17 EXECUTEプロシージャのパラメータ

パラメータ 説明

what

実行するSQLまたはPL/SQLのソース。

frame#

コードを実行するコンテキスト。現在は-1(グローバル・コンテキスト)のみサポートされています。

bind_results

ターゲット・セッションから値を戻すために、ソースをresultsに結合するかどうかを指定します。

0 = いいえ

1 = はい

results

結果を格納するコレクション(bind_resultsが0(ゼロ)以外の場合)。

errm

エラーが発生した場合はエラー・メッセージ、それ以外の場合はNULLです。


例1

この例はSQL文の実行例です。結果は戻されません。

DECLARE
   coll sys.dbms_debug_vc2coll; -- results (unused)
   errm VARCHAR2(100);
BEGIN
   dbms_debug.execute('insert into emp(ename,empno,deptno) ' ||
                      'values(''LJE'', 1, 1)',
                      -1, 0, coll, errm);
END;

例2

この例はPL/SQLブロックの実行例で、結果は戻されません。ブロックは自律型トランザクションで、表に挿入された値はデバッグ・セッションで参照できます。

DECLARE
   coll sys.dbms_debug_vc2coll;
   errm VARCHAR2(100);
BEGIN
   dbms_debug.execute(
       'DECLARE PRAGMA autonomous_transaction; ' ||
       'BEGIN ' ||
       '   insert into emp(ename, empno, deptno) ' ||
       '   values(''LJE'', 1, 1); ' ||
       ' COMMIT; ' ||
       'END;',
       -1, 0, coll, errm);
END;

例3

この例はPL/SQLブロックの実行例で、結果がいくつか戻されます。

DECLARE
   coll sys.dbms_debug_vc2coll;
   errm VARCHAR2(100);
BEGIN
   dbms_debug.execute(
      'DECLARE ' ||
      '   pp SYS.dbms_debug_vc2coll := SYS.dbms_debug_vc2coll(); ' ||
      '   x  PLS_INTEGER; ' ||
      '   i  PLS_INTEGER := 1; ' ||
      'BEGIN ' ||
      '   SELECT COUNT(*) INTO x FROM emp; ' ||
      '   pp.EXTEND(x * 6); ' ||
      '   FOR c IN (SELECT * FROM emp) LOOP ' ||
      '      pp(i) := ''Ename: '' || c.ename; i := i+1; ' ||
      '      pp(i) := ''Empno: '' || c.empno; i := i+1; ' ||
      '      pp(i) := ''Job:   '' || c.job;   i := i+1; ' ||
      '      pp(i) := ''Mgr:   '' || c.mgr;   i := i+1; ' ||
      '      pp(i) := ''Sal:   '' || c.sal;   i := i+1; ' ||
      '      pp(i) := null;                   i := i+1; ' ||
      '   END LOOP; ' ||
      '   :1 := pp;' ||
      'END;',
       -1, 1, coll, errm);
   each := coll.FIRST;
   WHILE (each IS NOT NULL) LOOP
      dosomething(coll(each));
      each := coll.NEXT(each);
   END LOOP;
END;

GET_INDEXESファンクション

変数またはパラメータの名前を指定すると、索引表の場合はその一連の索引を戻します。索引表以外の場合はエラーが戻されます。

構文

DBMS_DEBUG.GET_INDEXES (
   varname   IN  VARCHAR2,
   frame#    IN  BINARY_INTEGER,
   handle    IN  program_info,
   entries   OUT index_table)
RETURN BINARY_INTEGER;

パラメータ

表43-18 GET_INDEXESファンクションのパラメータ

パラメータ 説明

varname

索引情報を取得する変数の名前。

frame#

変数またはパラメータが常駐しているフレームの番号。パッケージ変数の場合はNULLです。

handle

パッケージの説明(オブジェクトがパッケージ変数の場合)。

entries

1ベースの索引表。NULL以外の場合は、entries(1)にその行の1番目の索引、entries(2)に2番目の索引が含まれ、以降同様に索引が含まれます。


戻り値

表43-19 GET_INDEXESファンクションの戻り値

戻り値 説明

error_no_such_object

次のいずれかです。

- パッケージが存在しません。

- パッケージがインスタンス化されていません。

- ユーザーにパッケージをデバッグする権限がありません。

- オブジェクトがパッケージ内に存在しません。



GET_MORE_SOURCEプロシージャ

フォーマット済バッファを生成したSHOW_SOURCEプロシージャの該当バージョンによって提供されたバッファにソースが収まらない場合、このプロシージャが追加ソースを提供します。

構文

DBMS_DEBUG.GET_MORE_SOURCE (
   buffer          IN OUT VARCHAR2,
   buflen          IN BINARY_INTEGER,
   piece#          IN BINARY_INTEGER);

パラメータ

表43-20 GET_MORE_SOURCEプロシージャのパラメータ

パラメータ 説明

buffer

バッファ

buflen

バッファの長さ

piece#

2とSHOW_SOURCEプロシージャの適切なバージョンへのコールからパラメータの各部分に戻された値との間の値


使用上の注意

このプロシージャは、フォーマット済バッファを戻すSHOW_SOURCEの該当バージョンの後にのみコールします。


GET_LINE_MAPファンクション

このファンクションは、ブレーク・ポイントを配置できるソース行をデバッガが決定できるように、プログラムに関する行およびエントリポイントの情報を検索します。

構文

DBMS_DEBUG.GET_LINE_MAP (
   program                IN   program_info,
   maxline                OUT  BINARY_INTEGER,
   number_of_entry_points OUT  BINARY_INTEGER,
   linemap                OUT  RAW)
  RETURN BINARY_INTEGER;

パラメータ

表43-21 GET_LINE_MAPファンクションのパラメータ

パラメータ 説明

program

トップレベルのプログラム・ユニット(プロシージャ、パッケージ、ファンクション、パッケージ本体など)。NamespaceNameおよびOwnerの各フィールドは初期化する必要がありますが、残りのフィールドは無視されます。

maxline

'program'内で最大のソース・コード行番号。

number_of_entry_points

'program'内のサブプログラムの数。

linemap

'program'の実行可能行を表すビットマップ。 行番号Nが実行可能である場合、ビット番号N MOD 8がラインマップ位置N / 8で1に設定されます。戻されるラインマップの長さは、maxlineを8で割ったものか(maxline MOD 8が0(ゼロ)以外の場合は1を加算)、または、ほとんど発生しないケースですが、maxlineが32767 * 8よりも大きい場合は32767のいずれかになります。


戻り値

表43-22 GET_LINE_MAPファンクションの戻り値

戻り値 説明

success

正常な完了。

error_no_debug_info

プログラム・ユニットは存在しますが、デバッグ情報がありません。

error_bad_handle

該当するプログラム・ユニットが存在しません。



GET_RUNTIME_INFOファンクション

このファンクションは、現行のプログラムに関する情報を戻します。 これは、SYNCHRONIZEまたはCONTINUEinfo_requestedパラメータが0(ゼロ)に設定された場合のみ必要です。


注意:

このファンクションは、現在クライアント側のPL/SQLでのみ使用されます。

構文

DBMS_DEBUG.GET_RUNTIME_INFO (
   info_requested  IN  BINARY_INTEGER,
   run_info        OUT runtime_info)
  RETURN BINARY_INTEGER;

パラメータ

表43-23 GET_RUNTIME_INFOファンクションのパラメータ

パラメータ 説明

info_requested

プログラムが停止したときに、run_infoに戻される必要のある情報。詳細は、「情報フラグ」を参照してください。

run_info

プログラムの状態に関する情報。



GET_TIMEOUT_BEHAVIOURファンクション

このプロシージャは、現行のタイムアウト動作を戻します。このコールは、ターゲット・セッションで行われます。

構文

DBMS_DEBUG.GET_TIMEOUT_BEHAVIOUR
 RETURN BINARY_INTEGER;

パラメータ

表43-24 GET_TIMEOUT_BEHAVIOURファンクションのパラメータ

パラメータ 説明

oer

OER(4バイトの正数)


戻り値

表43-25 GET_TIMEOUT_BEHAVIOURファンクションの戻り値

戻り値 説明

success

正常な完了。


情報フラグ

info_getOerInfo CONSTANT PLS_INTEGER:= 32;

使用上の注意

OERブレーク・ポイントでサポートされている機能は、コード・ブレーク・ポイントと比較すると少なくなります。特に、次の点に注意してください。


GET_VALUEファンクション

このファンクションは、現在実行中のプログラムから値を取得します。 GET_VALUEファンクションは、2種類オーバーロードされています。

構文

DBMS_DEBUG.GET_VALUE (
   variable_name  IN  VARCHAR2,
   frame#         IN  BINARY_INTEGER,
   scalar_value   OUT VARCHAR2,
   format         IN  VARCHAR2 := NULL)
RETURN BINARY_INTEGER;

パラメータ

表43-26 GET_VALUEファンクションのパラメータ

パラメータ 説明

variable_name

変数またはパラメータの名前。

frame#

値が存在するフレーム。0(ゼロ)の場合は現行のプロシージャです。

scalar_value

値。

format

使用するオプションの日付書式(指定する必要がある場合)。


戻り値

表43-27 GET_VALUEファンクションの戻り値

戻り値 説明

success

正常な完了。

error_bogus_frame

フレームが存在しません。

error_no_debug_info

エントリポイントにデバッグ情報がありません。

error_no_such_object

variable_nameframe#に存在しません。

error_unknown_type

デバッグ情報内のタイプ情報が判読不能です。

error_nullvalue

値がNULLです。

error_indexed_table

オブジェクトは表ですが、索引が提供されていません。


次のGET_VALUE構文は、パッケージ変数フェッチ用です。 フレーム番号のかわりに、変数を含んだパッケージを説明するハンドルを使用します。

構文

DBMS_DEBUG.GET_VALUE (
   variable_name  IN  VARCHAR2,
   handle         IN  program_info,
   scalar_value   OUT VARCHAR2,
   format         IN  VARCHAR2 := NULL)
RETURN BINARY_INTEGER;

パラメータ

表43-28 GET_VALUEファンクションのパラメータ

パラメータ 説明

variable_name

変数またはパラメータの名前。

handle

変数を含んだパッケージの説明。

scalar_value

値。

format

使用するオプションの日付書式(指定する必要がある場合)。


戻り値

表43-29 GET_VALUEファンクションの戻り値

戻り値 説明

error_no_such_object

次のいずれかです。

- パッケージが存在しません。

- パッケージがインスタンス化されていません。

- ユーザーにパッケージをデバッグする権限がありません。

- オブジェクトがパッケージ内に存在しません。

error_indexed_table

オブジェクトは表ですが、索引が提供されていません。


この例は、スキーマSCOTT内の変数VARを含んだ任意のパッケージPACKの値を取得する方法を示しています。

DECLARE
   handle     dbms_debug.program_info;
   resultbuf  VARCHAR2(500);
   retval     BINARY_INTEGER;
BEGIN
   handle.Owner     := 'SCOTT';
   handle.Name      := 'PACK';
   handle.namespace := dbms_debug.namespace_pkgspec_or_toplevel;
   retval           := dbms_debug.get_value('VAR', handle, resultbuf, NULL);
END;

INITIALIZEファンクション

このファンクションは、デバッグ用にターゲット・セッションを初期化します。

構文

DBMS_DEBUG.INITIALIZE (
   debug_session_id  IN VARCHAR2       := NULL,
   diagnostics       IN BINARY_INTEGER := 0)
  RETURN VARCHAR2;

パラメータ

表43-30 INITIALIZEファンクションのパラメータ

パラメータ 説明

debug_session_id

セッションIDの名前。NULLの場合は、一意のIDが生成されます。

diagnostics

診断出力をトレース・ファイルにダンプするかどうかを示します。

0 = (デフォルト)診断出力なし。

1 = 診断出力あり。


戻り値

新たに登録されたデバッグ・セッションID(デバッグID)

使用上の注意

DBMS_DEBUGとJDWPベースのデバッグ・インタフェースは同時に使用できません。このコールは、セッションが現在JDWPベースのデバッグ・インタフェースでデバッグ中の場合はORA-30677エラーが出て失敗します。あるいはコールが成功したとしても、さらにJDWPベースのインタフェースを使用してこのセッションをデバッグすることはできません。

DBMS_DEBUGへのコールは、コール元または指定されたデバッグ・ロールがDEBUG CONNECT SESSION権限を有する場合のみ成功します。 失敗した場合は、ORA-1031エラーが表示されます。他に起こりうる例外として、デバッグ・ロールが指定されてもパスワードが一致しない場合、コール元のユーザーがロールを権限付与されていない場合またはロールがアプリケーション起動型であるのにこのコールがロール起動パッケージ内から発生していない場合などもあります。

CREATE ANY PROCEDURE権限は、デバッガによるルーチンの可視性には影響を与えません。各オブジェクトへの権限DEBUGは、対応するDEBUG ANY PROCEDUREの変数を使用して導入されています。これは、セッションのログイン・ユーザー以外のユーザーが所有するルーチンを確認するために必要です。

デバッグ・ロールの認証およびDEBUG CONNECT SESSION権限のチェックは、このルーチンへのコール元のコンテキストの中で行われます。コール元が定義者権限ルーチンであるか、または定義者権限ルーチンからコールされている場合、定義ユーザー、デバッグ・ロールまたはPUBLICに付与された権限のみがDEBUG CONNECT SESSIONのチェックに使用されます。このコールが定義者権限ルーチン内からのものであると、デバッグ・ロールが指定される場合は、その定義者に付与されたものである必要があります。しかしセッション・ログイン・ユーザーに付与されたものである必要はなく、またコールが行われる際のコール・セッションで有効にする必要もありません。

このコールを実行した後で、デバッガによって行われる、個々のプロシージャ上でDEBUG権限を検索するチェックは、セッションのログイン・ユーザー、このコールが行われた瞬間のセッション・レベルで使用可能になったロール(そのロールがコールの定義者権限環境内で使用できない場合でも同様)およびデバッグ・ロールのコンテキストで行われます。


PINGプロシージャ

このプロシージャは、ターゲット・セッションがタイムアウトしないようにpingします。ターゲット・セッションで実行が中断したとき、ブレーク・ポイントなどでこのプロシージャを使用します。

timeout_behaviourretry_on_timeoutに設定されている場合、このプロシージャは不要です。

構文

DBMS_DEBUG.PING;

例外

ターゲット・プログラムがない場合、またはターゲット・セッションがデバッグ・セッションからの入力を待機していない場合は、no_target_program例外が表示されます。

使用上の注意

ターゲット・セッションのタイムアウト・オプションは、set_timeout_behaviourをコールすることによってターゲット・セッションに登録されます。

retry_on_timeout CONSTANT BINARY_INTEGER:= 0;

continue_on_timeout CONSTANT BINARY_INTEGER:= 1;

nodebug_on_timeout CONSTANT BINARY_INTEGER:= 2;

abort_on_timeout CONSTANT BINARY_INTEGER:= 3;


PRINT_BACKTRACEプロシージャ

このプロシージャは、現在の実行スタックのバックトレース・リストを出力します。これは、プログラムが実行中の場合のみコールしてください。

PRINT_BACKTRACEプロシージャは、2種類オーバーロードされています。

構文

DBMS_DEBUG.PRINT_BACKTRACE (
  listing IN OUT VARCHAR2);

DBMS_DEBUG.PRINT_BACKTRACE (
  backtrace OUT backtrace_table);

パラメータ

表43-31 PRINT_BACKTRACEプロシージャのパラメータ

パラメータ 説明

listing

埋込み改行付きのフォーマット済文字バッファ。

backtrace

バックトレース・エントリ1ベースの索引表。 現在実行中のプロシージャは、表の最終エントリです(つまり、フレーム番号は、GET_VALUEが使用しているものと同一です)。エントリ1は、スタック上で最も古いプロシージャです。



PRINT_INSTANTIATIONSプロシージャ

このプロシージャは、現行のセッションでインスタンス化されたパッケージのリストを戻します。

構文

DBMS_DEBUG.PRINT_INSTANTIATIONS (
   pkgs   IN OUT NOCOPY backtrace_table,
   flags  IN BINARY_INTEGER);

パラメータ

表43-32 PRINT_INSTANTIATIONSプロシージャのパラメータ

パラメータ 説明

pkgs

インスタンス化されたパッケージ

flags

オプションのビットマスク:

  • 1 - 仕様部の表示。

  • 2 - 本体の表示。

  • 4 - ローカル・インスタンス化の表示。

  • 8 - リモート・インスタンス化の表示(まだ実装されていません)。

  • 16 - 高速ジョブの実行。デバッグ情報が存在しているか、またはライブラリ・ユニットがシュリンクラップされているかどうかはテストされません。


例外

no_target_program: ターゲット・セッションは現在実行されていません。

使用上の注意

pkgsの戻り値には、各インスタンス化されたパッケージのprogram_infoが含まれます。有効なフィールドは、NamespaceNameOwnerおよびLibunitTypeです。

また、Line#には次のビットマスクが含まれます。


PROBE_VERSIONプロシージャ

このプロシージャは、サーバー上のDBMS_DEBUGのバージョン番号を戻します。

構文

DBMS_DEBUG.PROBE_VERSION (
   major out BINARY_INTEGER,
   minor out BINARY_INTEGER);

パラメータ

表43-33 PROBE_VERSIONプロシージャのパラメータ

パラメータ 説明

major

バージョン番号。

minor

リリース番号: 機能が追加されるたびに増加します。



SELF_CHECKプロシージャ

このプロシージャは、内部一貫性チェックを実行します。 SELF_CHECKは、プローブ・プロセスが通信可能かどうかを確認するために、通信テストも実行します。

SELF_CHECKが正常に終了しなかった場合は、このサーバーにインストールされているDBMS_DEBUGのバージョンが適切ではない可能性があります。 解決方法は、正しいバージョンをインストールすることです(pbload.sqlを実行すると、DBMS_DEBUGおよびその他の関連パッケージがロードされます)。

構文

DBMS_DEBUG.SELF_CHECK (
   timeout IN binary_integer := 60);

パラメータ

表43-34 SELF_CHECKプロシージャのパラメータ

パラメータ 説明

timeout

通信テストに使用するタイムアウト時間。デフォルトは60秒です。


例外

表43-35 SELF_CHECKプロシージャの例外

例外 説明

OER-6516

プローブのバージョンに一貫性がありません。

pipe_creation_failure

パイプを作成できませんでした。

pipe_send_failure

パイプにデータを書き込めませんでした。

pipe_receive_failure

パイプからデータを読み込めませんでした。

pipe_datatype_mismatch

パイプ内のデータ型が正しくありませんでした。

pipe_data_error

データがパイプ内で混同されていました。


これらはすべて致命的な例外です。プローブの正常な実行を妨げる重大な問題であることを示しています。


SET_BREAKPOINTファンクション

このファンクションは、現行セッションを持続するためのブレーク・ポイントをプログラム・ユニットに設定します。ターゲット・プログラムがブレーク・ポイントに到達すると、実行は一時停止します。

構文

DBMS_DEBUG.SET_BREAKPOINT (
   program     IN  program_info,
   line#       IN  BINARY_INTEGER,
   breakpoint# OUT BINARY_INTEGER,
   fuzzy       IN  BINARY_INTEGER := 0,
   iterations  IN  BINARY_INTEGER := 0)
  RETURN BINARY_INTEGER;

パラメータ

表43-36 SET_BREAKPOINTファンクションのパラメータ

パラメータ 説明

program

ブレーク・ポイントが設定されるプログラム・ユニットに関する情報(バージョン2.1以降では、ネームスペース、名前、所有者およびDBリンクをNULLに設定でき、この場合のブレーク・ポイントは、現在実行中のプログラム・ユニットに設定されます)。

line#

ブレーク・ポイントが設定される行。

breakpoint#

正常に完了すると、ブレーク・ポイントを参照するための一意のブレーク・ポイント番号が含まれます。

fuzzy

指定した行に実行可能コードがない場合にのみ適用されます。

0(ゼロ)の場合は、error_illegal_lineが戻されます。

1の場合は、ブレーク・ポイントを設定する行が指定行から順方向に検索されます。

-1の場合は、ブレーク・ポイントを設定する行が指定行から逆方向に検索されます。

iterations

このブレーク・ポイントを通知するまでの待機回数。


戻り値


注意:

fuzzyおよびiterationsパラメータは、まだ実装されていません。

表43-37 SET_BREAKPOINTファンクションの戻り値

戻り値 説明

success

正常な完了。

error_illegal_line

この行にブレーク・ポイントは設定できません。

error_bad_handle

該当するプログラム・ユニットが存在しません。



SET_OER_BREAKPOINTファンクション

このファンクションは、OERブレーク・ポイントを設定します。

構文

DBMS_DEBUG.SET_OER_BREAKPOINT (
   oer  IN PLS_INTEGER)
RETURN PLS_INTEGER;

パラメータ

表43-38 SET_OER_BREAKPOINTファンクションのパラメータ

パラメータ 説明

oer

OER(4バイトの正数)。


戻り値

表43-39 SET_OER_BREAKPOINTファンクションの戻り値

戻り値 説明

success

正常な完了。

error_no_such_breakpt

該当するブレーク・ポイントが存在しません。



SET_TIMEOUTファンクション

このファンクションは、タイムアウト値を設定し、新しいタイムアウト値を戻します。

構文

DBMS_DEBUG.SET_TIMEOUT (
   timeout BINARY_INTEGER)
  RETURN BINARY_INTEGER;

パラメータ

表43-40 SET_TIMEOUTファンクションのパラメータ

パラメータ 説明

timeout

ターゲットとデバッグ・セッション間の通信に使用されるタイムアウト



SET_TIMEOUT_BEHAVIOURプロシージャ

このプロシージャは、タイムアウト発生時のターゲット・セッションの処理方法をプローブに通知します。このコールは、ターゲット・セッションで行われます。

構文

DBMS_DEBUG.SET_TIMEOUT_BEHAVIOUR (
   behaviour IN PLS_INTEGER);

パラメータ

表43-41 SET_TIMEOUT_BEHAVIOURプロシージャのパラメータ

パラメータ 説明

behavior: 次のいずれかです。


retry_on_timeout

再試行します。タイムアウトの効果はありません。timeoutに無限に大きい値を設定した場合と同じです。

continue_on_timeout

同じイベント・フラグを使用して、実行を継続します。

nodebug_on_timeout

debug-modeをオフにして(つまり、debug_offをコール)、実行を継続します。 debug_onをコールして初期化しなおさないかぎり、これ以降、このターゲット・セッションでイベントは生成されません。

abort_on_timeout

abort_executionフラグを使用して実行を継続します。プログラムは即時に終了します。セッションはデバッグ・モードのままです。


例外

unimplemented: 要求された動作が認識されていません。

使用上の注意

デフォルトの動作(このプロシージャがコールされない場合)は、continue_on_timeoutです。これは、デバッガ・クライアントが(次のイベントで)制御を再確立でき、ターゲット・セッションが無期限にハングアップすることはないためです。


SET_VALUEファンクション

このファンクションは、現在実行中のプログラムに値を設定します。 SET_VALUEファンクションは、2種類オーバーロードされています。

構文

DBMS_DEBUG.SET_VALUE (
   frame#               IN binary_integer,
   assignment_statement IN varchar2)
  RETURN BINARY_INTEGER;

DBMS_DEBUG.SET_VALUE (
   handle               IN program_info,
   assignment_statement IN VARCHAR2)
  RETURN BINARY_INTEGER;

パラメータ

表43-42 SET_VALUEファンクションのパラメータ

パラメータ 説明

frame#

値を設定するフレーム。0(ゼロ)は現在実行中のフレームを意味します。

handle

変数を含んだパッケージの説明。

assignment_statement

値を設定するために実行する代入文(有効なPL/SQLである必要があります)。 たとえば、'x := 3;'のように指定します。

このリリースでは、スカラー値のみサポートされています。代入文の右辺はスカラーである必要があります。


戻り値

表43-43 SET_VALUEファンクションの戻り値

戻り値 説明

success

-

error_illegal_value

指定した値を設定できません。

error_illegal_null

オブジェクト・タイプは'NOT NULL'で指定されているため、NULLは設定できません。

error_value_malformed

値がスカラーではありません。

error_name_incomplete

代入文をスカラーに変換できません。 たとえば、'x := 3;'(xがレコードの場合)のように指定します。

error_no_such_object

次のいずれかです。

- パッケージが存在しません。

- パッケージがインスタンス化されていません。

- ユーザーにパッケージをデバッグする権限がありません。

- オブジェクトがパッケージ内に存在しません。


使用上の注意

PL/SQLコンパイラが一時ファイルを使用してパッケージ変数にアクセスし、このような一時ファイルの更新を保証しない場合があります。 ほとんど発生しませんが、SET_VALUEを使用したパッケージ変数の変更がおよばない行があります。

SCOTT.PACK.varの値を6に設定する方法は次のとおりです。

DECLARE
   handle  dbms_debug.program_info;
   retval  BINARY_INTEGER;
BEGIN
   handle.Owner     := 'SCOTT';
   handle.Name      := 'PACK';
   handle.namespace := dbms_debug.namespace_pkgspec_or_toplevel;
   retval           := dbms_debug.set_value(handle, 'var := 6;');
END;

SHOW_BREAKPOINTSプロシージャ

現行のブレーク・ポイントのリストを戻すプロシージャは、2種類オーバーロードされています。 SHOW_BREAKPOINTSプロシージャは、3種類オーバーロードされています。

構文

DBMS_DEBUG.SHOW_BREAKPOINTS (
   listing    IN OUT VARCHAR2);

DBMS_DEBUG.SHOW_BREAKPOINTS (
   listing    OUT breakpoint_table);

DBMS_DEBUG.SHOW_BREAKPOINTS (
   code_breakpoints  OUT breakpoint_table,
   oer_breakpoints   OUT oer_table);

パラメータ

表43-44 SHOW_BREAKPOINTSプロシージャのパラメータ

パラメータ 説明

listing

ブレーク・ポイントのフォーマット済バッファ(改行を含む)。

ブレーク・ポイント・エントリの索引表。ブレーク・ポイント番号は、表に対する索引で示されます。ブレーク・ポイント番号は1から始まり、削除されると再使用されます。

code_breakpoints

ブレーク・ポイント番号で索引付けされた、ブレーク・ポイント・エントリの索引表。

oer_breakpoints

OERで索引付けされた、OERブレーク・ポイントの索引表。



SHOW_FRAME_SOURCEプロシージャ

このプロシージャは、ソース・コードを取得します。SHOW_SOURCEプロシージャは、2種類オーバーロードされています。

構文

DBMS_DEBUG.SHOW_FRAME_SOURCE (
   first_line  IN            BINARY_INTEGER,
   last_line   IN            BINARY_INTEGER,
   source      IN OUT NOCOPY vc2_table,
   frame_num   IN            BINARY_INTEGER);

パラメータ

表43-45 SHOW_FRAME_SOURCEプロシージャのパラメータ

パラメータ 説明

first_line

フェッチする最初の行の行番号(PL/SQLプログラムは、常に行1から始まり、途中の行が抜けることはありません)。

last_line

フェッチする最後の行の行番号。プログラムの行数を超えると行はフェッチされません。

source

結果の表。行番号で索引が設定されている場合があります。

frame_num

1から開始するフレーム番号。


使用上の注意


SHOW_SOURCEプロシージャ

このプロシージャは、ソース・コードを取得します。SHOW_SOURCEプロシージャは、2種類オーバーロードされています。

構文

DBMS_DEBUG.SHOW_SOURCE (
   first_line  IN   BINARY_INTEGER,
   last_line   IN   BINARY_INTEGER,
   source      OUT  vc2_table);

DBMS_DEBUG.SHOW_SOURCE (
   first_line   IN     BINARY_INTEGER,
   last_line    IN     BINARY_INTEGER,
   window       IN     BINARY_INTEGER,
   print_arrow  IN     BINARY_INTEGER,
   buffer       IN OUT VARCHAR2,
   buflen       IN     BINARY_INTEGER,
   pieces       OUT    BINARY_INTEGER);

パラメータ

表43-46 SHOW_SOURCEプロシージャのパラメータ

パラメータ 説明

first_line

フェッチする最初の行の行番号(PL/SQLプログラムは、常に行1から始まり、途中の行が抜けることはありません)。

last_line

フェッチする最後の行の行番号。プログラムの行数を超えると行はフェッチされません。

source

結果の表。行番号で索引が設定されている場合があります。

window

行の'ウィンドウ'(現行のソース行の概数)。

print_arrow

0(ゼロ)以外の場合は、カレント行の前に矢印が出力されます。

buffer

ソース・リストを格納するバッファ。

buflen

バッファの長さ。

pieces

指定したバッファにすべてのソースを格納できない可能性がある場合は、0(ゼロ)以外の値が設定されます。


戻り値

ソース行の索引表。 ソース行は、first_lineから格納されます。エラーが発生した場合は、空の表が戻されます。

使用上の注意

(実行されているプログラムの)ソース・コードを取得する最適な方法は、SQLを使用することです。次に例を示します。

DECLARE
    info DBMS_DEBUG.runtime_info;
BEGIN
   -- call DBMS_DEBUG.SYNCHRONIZE, CONTINUE,
   -- or GET_RUNTIME_INFO to fill in 'info'
   SELECT text INTO <buffer> FROM all_source
   WHERE owner = info.Program.Owner
     AND name  = info.Program.Name
     AND line  = info.Line#;
END;

ただし、このコードは非永続プログラム(無名ブロックやトリガー起動ブロックなど)では機能しません。 非永続プログラムの場合は、SHOW_SOURCEをコールしてください。2通りの方法があり、1つはソース行の索引表を戻し、他の1つはパック(およびフォーマット)されたバッファを戻します。

次の2番目のSHOW_SOURCEの書式は、フォーマット済バッファに行番号の付いたソースを戻します。索引表を使用するより処理は高速ですが、すべてのソースがフェッチされるとはかぎりません。

ソースがバッファ長(buflen)にすべて格納できなかった場合は、GET_MORE_SOURCEプロシージャを使用して追加のピースを取り出せます(piecesは、取り出す必要のある追加ピースの数を戻します)。


SYNCHRONIZEファンクション

このファンクションは、ターゲット・プログラムがイベントを通知するまで待機します。 info_requestedNULLでない場合は、GET_RUNTIME_INFOをコールします。

構文

DBMS_DEBUG.SYNCHRONIZE (
   run_info       OUT  runtime_info,
   info_requested IN   BINARY_INTEGER := NULL)
  RETURN BINARY_INTEGER;

パラメータ

表43-47 SYNCHRONIZEファンクションのパラメータ

パラメータ 説明

run_info

プログラムに関する情報を書き込むためのデータ構造。デフォルトでは、実行中のプログラムおよび一時停止している行に関する情報が含まれます。

info_requested

デフォルト(info_getStackDepth + info_getLineInfo)以外の情報を要求するためのオプションのビット・フィールド。0(ゼロ)は、情報を要求しないことを意味します。

詳細は、「情報フラグ」を参照してください。


戻り値

表43-48 SYNCHRONIZEファンクションの戻り値

戻り値 説明

success

正常な完了。

error_timeout

プログラムが実行を開始する前にタイムアウトしました。

error_communication

その他の通信エラー。



TARGET_PROGRAM_RUNNINGプロシージャ

このプロシージャは、ターゲット・セッションが現在ストアド・プロシージャを実行中の場合はTRUE、実行していない場合はFALSEを戻します。

構文

DBMS_DEBUG.TARGET_PROGRAM_RUNNING
  RETURN BOOLEAN;