DBMS_DEBUG
は、OracleサーバーにおけるPL/SQLデバッガ・レイヤー、プローブに対するPL/SQLインタフェースです。
このAPIは、主にサーバー側のデバッガを実装することを目的としており、サーバー側のPL/SQLプログラム・ユニットをデバッグする方法を提供します。
注意: プログラム・ユニットという用語は、各種のPL/SQLプログラム(プロシージャ、ファンクション、パッケージ、パッケージ本体、トリガー、無名ブロック、オブジェクト・タイプまたはオブジェクト・タイプ本体)のことを指します。 |
この章では、次の項目について説明します。
概要
定数
変数
例外
使用上の注意
レコード・タイプ
表タイプ
サーバー側のコードをデバッグするには、2つのデータベース・セッションが必要です。1つはコードをデバッグ・モードで実行するセッション(ターゲット・セッション)、他の1つはそのターゲット・セッションを監視するセッション(デバッグ・セッション)です。
ターゲット・セッションは、DBMS_DEBUG
で初期化コールを行うことでデバッグ可能になります。この結果、そのセッションにマークが付けられるため、PL/SQLインタプリタがデバッグ・モードで実行され、デバッグ・イベントが生成されます。デバッグ・イベントが生成されると、それらはセッションから転送されます。ほとんどの場合、デバッグ・イベントには戻り通知が必要です。インタプリタは応答があるまで一時停止します。
この間に、デバッグ・セッション自体はDBMS_DEBUG
を使用して初期化する必要があります。これにより、監視するターゲット・セッションが識別されます。 次に、デバッグ・セッションはDBMS_DEBUG
のエントリポイントをコールして、ターゲット・セッションから転送されたイベントを読み込み、ターゲット・セッションと通信します。
次のサブプログラムは、ターゲット・セッション(デバッグ対象のセッション)で実行されます。
DBMS_DEBUG
は、PL/SQLコンパイラへのインタフェースは提供しませんが、コンパイラがオプションで生成するデバッグ情報には依存します。デバッグ情報がないと、パラメータまたは変数の値の検証や変更を実行できません。
ブレーク・ポイントの状態には次の値があります。
breakpoint_status_unused
: ブレーク・ポイントは使用されていません。
ブレーク・ポイントが使用されている場合、状態は次の値のマスクになります。
breakpoint_status_active
: 行ブレーク・ポイント。
breakpoint_status_disabled
: ブレーク・ポイントは現在使用できません。
breakpoint_status_remote
: shadowブレーク・ポイント(リモート・ブレーク・ポイントのローカル表示)
DBMS_DEBUG
では、表43-1に示す変数が使用されます。
表43-1 DBMS_DEBUGの変数
変数 | 説明 |
---|---|
|
タイムアウトの値(両方のセッションが使用します)。最小許容値は1秒です。この値が0(ゼロ)に設定された場合は、大きい値(3600)が使用されます。 |
この値は、デバッグ・セッション(SYNCHRONIZE
、CONTINUE
、SET_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に、デバッグ対象のセッションおよびデバッグ・セッションでの操作のフローを示します。
インタプリタは、次の場合に実行を一時停止します。
インタプリタの起動時。実行前に、遅延ブレーク・ポイントをインストールできるようにするため。
使用可能なブレーク・ポイントを含んだ行に達したとき。
関連のあるイベントが発生した行に達したとき。 関連イベントのセットは、breakflags
パラメータのDBMS_DEBUG
.CONTINUE
に渡されるフラグで指定します。
セッション終了のイベントはありません。したがって、ターゲット・セッションが終了していないことを、デバッグ・セッションでチェックして確認する必要があります。 ターゲット・セッションが終了した後にDBMS_DEBUG
.SYNCHRONIZE
をコールすると、タイムアウトするまでデバッグ・セッションがハングアップします。
図では、ターゲット・セッションの前にブレーク・ポイントを設定できることが示されています。これは確かに可能です。この場合、プローブはブレーク・ポイント要求をキャッシュして、最初の同期でターゲット・セッションに送信します。ただし、ブレーク・ポイント要求がこのように遅延した場合は次のようになります。
SET_BREAKPOINT
はブレーク・ポイント番号を設定しません(必要に応じて後でSHOW_BREAKPOINTS
から取得できます)。
SET_BREAKPOINT
はブレーク・ポイント要求を検証しません。要求されたソース行が存在しない場合は、同期時にエラーが内部的に発生し、ブレーク・ポイントは設定されません。
プローブをデバッグするために、DBMS_DEBUG
のコールの一部に対してdiagnosticsパラメータが用意されています。これらのパラメータは、RDBMSトレース・ファイルに診断出力を格納するかどうかを指定します。RDBMSトレース・ファイルに出力できない場合、このパラメータは無効になります。
次に示すサブプログラムは、ターゲットまたはデバッグ・セッションのいずれでもコールできます。
次のサブプログラムは、ターゲット・セッションでのみコールできます。
次のサブプログラムは、デバッグ・セッションでのみ実行してください。
PL/SQLプログラム内で宣言される例外は、ユーザー定義の例外として認識されています。この他に、Oracleカーネルから戻されるOracleエラー(OER)があります。 この2つのメカニズムを結合するために、PL/SQLはユーザー定義の例外をOERに変換するexception_init
プラグマを提供しています。この処理にはPL/SQLハンドラが使用され、PL/SQLエンジンは、OERをOracleカーネルに戻すことができます。現行のリリースでは、OERに関する使用可能な情報はその番号のみです。 2つのユーザー定義例外が同じOERにexception_initされると、区別できません。
サーバー上のプログラム・ユニットは、異なるネームスペースに常駐しています。ブレーク・ポイントの設定時には、希望するネームスペースを指定してください。
Namespace_cursor
にはカーソル(無名ブロック)が含まれています。
Namespace_pgkspec_or_toplevel
には次が含まれています。
パッケージ仕様部
他のパッケージ、プロシージャまたはファンクション内にネストされていないプロシージャおよびファンクション
オブジェクト・タイプ
Namespace_pkg_body
にはパッケージ本体およびタイプ本体が含まれています。
Namespace_trigger
にはトリガーが含まれています。
この値は、特定のネームスペースのオブジェクトを一意化するために使用されます。 これらの定数は、プローブがスタックのバックトレースを提供しているときに、PROGRAM_INFO
で使用されます。
LibunitType_cursor
LibunitType_procedure
LibunitType_function
LibunitType_package
LibunitType_package_body
LibunitType_trigger
LibunitType_Unknown
この値は、クライアントに関連のあるイベントをプローブに通知するために、CONTINUE
に対するbreakflags
パラメータで使用されます。これらのフラグは結合できます。
値 | 説明 |
---|---|
break_next_line |
次のソース行でブレークします(コールをスキップ)。 |
break_any_call |
次のソース行でブレークします(コールを開始)。 |
break_any_return |
現行のエントリポイントから戻された後ブレーク(現行のルーチンからコールされたエントリポイントはすべてスキップ)します。 |
break_return |
次回のエントリポイントが戻し処理の準備ができた時点でブレークします。(現行のエントリポイントからコールされたエントリポイントが含まれます。 インタプリタがProc2 をコールするProc1 を実行している場合、break_return はProc2 の終了時に停止します。) |
break_exception |
例外が発生したときにブレークします。 |
break_handler |
例外ハンドラが実行されたときにブレークします。 |
abort_execution |
実行を停止し、DBMS_DEBUG .CONTINUE がコールされるとすぐに、'exit'イベントを強制的に実行します。 |
このフラグは、info_requested
パラメータとしてSYNCHRONIZE
、CONTINUE
および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
パッケージでは、レコード・タイプと表タイプを定義します。
レコード・タイプ
表タイプ
このタイプは、ブレーク・ポイントに関して、現在の状態や配置されたプログラム・ユニットなどの情報を提供します。
構文
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のフィールド
フィールド | 説明 |
---|---|
|
プログラム・ユニットの名前。 |
|
プログラム・ユニットの所有者。 |
dblink |
データベース・リンク(リモートの場合)。 |
|
行番号。 |
|
ネストされたプロシージャまたはファンクション以外は |
status |
|
このタイプはプログラムの位置を指定します。プログラム・ユニットの中の行番号を使用します。これは、スタックのバックトレース用およびブレーク・ポイントの設定と検査用に使用されます。読取り専用フィールドは、ブレーク・ポイント操作に関してプローブでは現在無視されています。スタックのバックトレース用のみにプローブが設定します。
構文
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のフィールド
フィールド | 説明 |
---|---|
|
「ネームスペース」を参照してください。 |
|
プログラム・ユニットの名前。 |
|
プログラム・ユニットの所有者。 |
dblink |
データベース・リンク(リモートの場合)。 |
|
行番号。 |
libunittype |
読取り専用フィールド。ネストされたプロシージャまたはファンクション以外は |
entrypointname |
読取り専用フィールド。同じネームスペースを共有するオブジェクト(プロシージャやパッケージ仕様部など)を一意化します。 詳細は、「Libunitタイプ」を参照してください。 |
このタイプは、実行プログラムに関するコンテキスト情報を提供します。
構文
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のフィールド
フィールド | 説明 |
---|---|
|
|
|
プログラムが終了しているかどうか |
|
ブレーク・ポイント番号 |
stackdepth |
スタック上のフレームの数 |
|
[予約フィールド] |
reason |
中断理由 |
program |
ソースの場所 |
このタイプは、PRINT_BACKTRACE
で使用されます。
構文
TYPE backtrace_table IS TABLE OF program_info INDEX BY BINARY_INTEGER;
このタイプは、SHOW_BREAKPOINTS
で使用されます。
構文
TYPE breakpoint_table IS TABLE OF breakpoint_info INDEX BY BINARY_INTEGER;
このタイプは、索引表で使用可能な索引を戻すために、GET_INDEXES
で使用されます。
構文
TYPE index_table IS table of BINARY_INTEGER INDEX BY BINARY_INTEGER;
このタイプは、SHOW_SOURCE
で使用されます。
構文
TYPE vc2_table IS TABLE OF VARCHAR2(90) INDEX BY BINARY_INTEGER;
表43-5 DBMS_DEBUGパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
デバッグ・セッションにターゲット・デバッグIDに関する情報を通知します。 |
|
ターゲット・プログラムの実行を継続します。 |
|
デバッグ・モードをオフにします。 |
|
デバッグ・モードをオンにします。 |
|
ブレーク・ポイントを削除します。 |
|
OERブレーク・ポイントを削除します。 |
|
ターゲット・プログラムのデバッグを停止します。 |
|
ブレーク・ポイントを使用禁止にします。 |
|
既存のブレーク・ポイントをアクティブにします。 |
|
ターゲット・セッションでSQLまたはPL/SQLを実行します。 |
|
索引表に対する一連の索引を戻します。 |
|
SHOW_SOURCEの使用時に、バッファ・オーバーフローが起きたときに追加ソースを提供します。 |
|
プログラム・ユニット内の行番号に関する情報を戻します。 |
|
現行のプログラムに関する情報を戻します。 |
|
現行のタイムアウト動作を戻します。 |
|
現在実行中のプログラムから値を取得します。 |
|
ターゲット・セッションのデバッグIDを設定します。 |
|
ターゲット・セッションがタイムアウトしないようにpingします。 |
|
スタックのバックトレースを印刷します。 |
|
スタックのバックトレースを印刷します。 |
|
サーバー上の |
|
内部一貫性チェックを実行します。 |
|
プログラム・ユニットにブレーク・ポイントを設定します。 |
|
OERブレーク・ポイントを設定します。 |
|
タイムアウト値を設定します。 |
|
タイムアウトの発生時に、ターゲット・セッションに行う処理をプローブに指示します。 |
|
現在実行中のプログラムに値を設定します。 |
|
現行のブレーク・ポイントのリストを戻します。 |
|
フレーム・ソースをフェッチします。 |
|
プログラム・ソースをフェッチします。 |
|
プログラムの実行開始を待機します。 |
|
ターゲット・セッションが現在ストアド・プロシージャを実行中の場合は |
このプロシージャは、ターゲット・プログラムに関する情報をデバッグ・セッションに通知します。
構文
DBMS_DEBUG.ATTACH_SESSION ( debug_session_id IN VARCHAR2, diagnostics IN BINARY_INTEGER := 0);
パラメータ
表43-6 ATTACH_SESSIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ターゲット・セッションの |
|
0(ゼロ)以外の場合に診断出力を生成します。 |
このファンクションは、所定のブレーク・フラグ(関連のあるイベントのマスク)をターゲット・プロセスのプローブに渡します。プローブに、ターゲット・プロセスの実行を継続するように通知し、ターゲット・プロセスが実行を終了するか、またはイベントを通知するまで待機します。
info_requested
がNULL
でない場合は、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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
プログラムの状態に関する情報。 |
|
関連のあるイベントのマスク。詳細は、「ブレーク・フラグ」を参照してください。 |
|
プログラムが停止したときに、 |
戻り値
表43-8 CONTINUEファンクションの戻り値
戻り値 | 説明 |
---|---|
|
|
|
プログラムが実行を開始する前にタイムアウトしました。 |
|
その他の通信エラー。 |
注意: immediateが |
このプロシージャは、そのセッションでデバッグを起動する必要がなくなったことをターゲット・セッションに通知します。セッションの終了前にこのファンクションをコールする必要はありません。
構文
DBMS_DEBUG.DEBUG_OFF;
使用上の注意
サーバーは、このエントリポイントを特別には処理しません。したがって、このエントリポイントをデバッグしようとします。
このプロシージャは、すべてのPL/SQLがデバッグ・モードで実行されるように、ターゲット・セッションにマークを設定します。この処理は、デバッグの開始前に実行する必要があります。
構文
DBMS_DEBUG.DEBUG_ON ( no_client_side_plsql_engine BOOLEAN := TRUE, immediate BOOLEAN := FALSE);
パラメータ
表43-9 DEBUG_ONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
デバッグ・セッションがクライアント側のPL/SQLエンジンから起動されていないかぎり、デフォルト値のままにしてください。 |
|
|
このファンクションはブレーク・ポイントを削除します。
構文
DBMS_DEBUG.DELETE_BREAKPOINT ( breakpoint IN BINARY_INTEGER) RETURN BINARY_INTEGER;
パラメータ
戻り値
表43-11 DELETE_BREAKPOINTファンクションの戻り値
戻り値 | 説明 |
---|---|
|
|
|
該当するブレーク・ポイントが存在しません。 |
|
未使用のブレーク・ポイントは削除できません。 |
|
ブレーク・ポイントが設定された後にプログラム・ユニットが再定義されました。 |
このファンクションは、OERブレーク・ポイントを削除します。
構文
DBMS_DEBUG.DELETE_OER_BREAKPOINT ( oer IN PLS_INTEGER) RETURN PLS_INTEGER;
パラメータ
このプロシージャは、ターゲット・プログラムのデバッグを停止します。このプロシージャはいつでもコール可能ですが、デバッグ・セッションの連結が解除されたことはターゲット・セッションに通知されず、ターゲット・セッションの実行は終了しません。したがって、ターゲット・セッションが独自にハングアップしないように注意してください。
構文
DBMS_DEBUG.DETACH_SESSION;
このファンクションは、既存のブレーク・ポイントを使用禁止にしますが、削除しないでそのまま残します。
構文
DBMS_DEBUG.DISABLE_BREAKPOINT ( breakpoint IN BINARY_INTEGER) RETURN BINARY_INTEGER;
パラメータ
戻り値
表43-14 DISABLE_BREAKPOINTファンクションの戻り値
戻り値 | 説明 |
---|---|
|
|
|
該当するブレーク・ポイントが存在しません。 |
|
未使用のブレーク・ポイントは使用禁止にできません。 |
このファンクションは、使用禁止の逆の処理を実行します。以前に使用禁止にしたブレーク・ポイントを使用可能にします。
構文
DBMS_DEBUG.ENABLE_BREAKPOINT ( breakpoint IN BINARY_INTEGER) RETURN BINARY_INTEGER;
パラメータ
戻り値
表43-16 ENABLE_BREAKPOINTファンクションの戻り値
戻り値 | 説明 |
---|---|
|
成功。 |
|
該当するブレーク・ポイントが存在しません。 |
|
未使用のブレーク・ポイントは使用可能にできません。 |
このプロシージャは、ターゲット・セッションで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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するSQLまたはPL/SQLのソース。 |
|
コードを実行するコンテキスト。現在は-1(グローバル・コンテキスト)のみサポートされています。 |
|
ターゲット・セッションから値を戻すために、ソースを 0 = いいえ 1 = はい |
|
結果を格納するコレクション( |
|
エラーが発生した場合はエラー・メッセージ、それ以外の場合は |
例
例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;
変数またはパラメータの名前を指定すると、索引表の場合はその一連の索引を戻します。索引表以外の場合はエラーが戻されます。
構文
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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
索引情報を取得する変数の名前。 |
|
変数またはパラメータが常駐しているフレームの番号。パッケージ変数の場合は |
|
パッケージの説明(オブジェクトがパッケージ変数の場合)。 |
|
1ベースの索引表。 |
戻り値
表43-19 GET_INDEXESファンクションの戻り値
戻り値 | 説明 |
---|---|
|
次のいずれかです。 - パッケージが存在しません。 - パッケージがインスタンス化されていません。 - ユーザーにパッケージをデバッグする権限がありません。 - オブジェクトがパッケージ内に存在しません。 |
フォーマット済バッファを生成したSHOW_SOURCEプロシージャの該当バージョンによって提供されたバッファにソースが収まらない場合、このプロシージャが追加ソースを提供します。
構文
DBMS_DEBUG.GET_MORE_SOURCE ( buffer IN OUT VARCHAR2, buflen IN BINARY_INTEGER, piece# IN BINARY_INTEGER);
パラメータ
表43-20 GET_MORE_SOURCEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
バッファ |
|
バッファの長さ |
|
2とSHOW_SOURCEプロシージャの適切なバージョンへのコールからパラメータの各部分に戻された値との間の値 |
使用上の注意
このプロシージャは、フォーマット済バッファを戻すSHOW_SOURCEの該当バージョンの後にのみコールします。
このファンクションは、ブレーク・ポイントを配置できるソース行をデバッガが決定できるように、プログラムに関する行およびエントリポイントの情報を検索します。
構文
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'内で最大のソース・コード行番号。 |
|
'program'内のサブプログラムの数。 |
|
'program'の実行可能行を表すビットマップ。 行番号Nが実行可能である場合、ビット番号N MOD 8がラインマップ位置N / 8で1に設定されます。戻されるラインマップの長さは、 |
戻り値
表43-22 GET_LINE_MAPファンクションの戻り値
戻り値 | 説明 |
---|---|
|
正常な完了。 |
|
プログラム・ユニットは存在しますが、デバッグ情報がありません。 |
|
該当するプログラム・ユニットが存在しません。 |
このファンクションは、現行のプログラムに関する情報を戻します。 これは、SYNCHRONIZE
またはCONTINUE
のinfo_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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
プログラムが停止したときに、 |
|
プログラムの状態に関する情報。 |
このプロシージャは、現行のタイムアウト動作を戻します。このコールは、ターゲット・セッションで行われます。
構文
DBMS_DEBUG.GET_TIMEOUT_BEHAVIOUR RETURN BINARY_INTEGER;
パラメータ
戻り値
情報フラグ
info_getOerInfo CONSTANT PLS_INTEGER:= 32;
使用上の注意
OERブレーク・ポイントでサポートされている機能は、コード・ブレーク・ポイントと比較すると少なくなります。特に、次の点に注意してください。
ブレーク・ポイント番号は戻されません。かわりにOERの番号が使用されます。したがって、指定したOERに複数のブレーク・ポイントは設定できません(操作できません)。
OERブレーク・ポイントは使用禁止にできません(ただし、クライアントは、これを削除して自由にシミュレートできます)。
OERブレーク・ポイントは、delete_oer_breakpoint
を使用して削除されます。
このファンクションは、現在実行中のプログラムから値を取得します。 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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
変数またはパラメータの名前。 |
|
値が存在するフレーム。0(ゼロ)の場合は現行のプロシージャです。 |
|
値。 |
|
使用するオプションの日付書式(指定する必要がある場合)。 |
戻り値
表43-27 GET_VALUEファンクションの戻り値
戻り値 | 説明 |
---|---|
|
正常な完了。 |
|
フレームが存在しません。 |
|
エントリポイントにデバッグ情報がありません。 |
|
|
|
デバッグ情報内のタイプ情報が判読不能です。 |
|
値が |
|
オブジェクトは表ですが、索引が提供されていません。 |
次の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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
変数またはパラメータの名前。 |
|
変数を含んだパッケージの説明。 |
|
値。 |
|
使用するオプションの日付書式(指定する必要がある場合)。 |
戻り値
表43-29 GET_VALUEファンクションの戻り値
戻り値 | 説明 |
---|---|
|
次のいずれかです。 - パッケージが存在しません。 - パッケージがインスタンス化されていません。 - ユーザーにパッケージをデバッグする権限がありません。 - オブジェクトがパッケージ内に存在しません。 |
|
オブジェクトは表ですが、索引が提供されていません。 |
例
この例は、スキーマ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;
このファンクションは、デバッグ用にターゲット・セッションを初期化します。
構文
DBMS_DEBUG.INITIALIZE ( debug_session_id IN VARCHAR2 := NULL, diagnostics IN BINARY_INTEGER := 0) RETURN VARCHAR2;
パラメータ
表43-30 INITIALIZEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
セッションIDの名前。 |
|
診断出力をトレース・ファイルにダンプするかどうかを示します。 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します。ターゲット・セッションで実行が中断したとき、ブレーク・ポイントなどでこのプロシージャを使用します。
timeout_behaviour
がretry_on_timeout
に設定されている場合、このプロシージャは不要です。
構文
DBMS_DEBUG.PING;
例外
ターゲット・プログラムがない場合、またはターゲット・セッションがデバッグ・セッションからの入力を待機していない場合は、no_target_program
例外が表示されます。
使用上の注意
ターゲット・セッションのタイムアウト・オプションは、set_timeout_behaviour
をコールすることによってターゲット・セッションに登録されます。
retry_on_timeout
: 再試行します。タイムアウトの効果はありません。timeoutに無限に大きい値を設定した場合と同じです。
continue_on_timeout
: 同じイベント・フラグを使用して、実行を継続します。
nodebug_on_timeout
: debug-modeをオフにして(つまり、debug_offをコール)、実行を継続します。 debug_onをコールして初期化しなおさないかぎり、これ以降、このターゲット・セッションでイベントは生成されません。
abort_on_timeout
: abort_executionフラグを使用して実行を継続します。プログラムは即時に終了します。セッションはデバッグ・モードのままです。
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
プロシージャは、2種類オーバーロードされています。
構文
DBMS_DEBUG.PRINT_BACKTRACE ( listing IN OUT VARCHAR2); DBMS_DEBUG.PRINT_BACKTRACE ( backtrace OUT backtrace_table);
表43-31 PRINT_BACKTRACEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
埋込み改行付きのフォーマット済文字バッファ。 |
|
バックトレース・エントリ1ベースの索引表。 現在実行中のプロシージャは、表の最終エントリです(つまり、フレーム番号は、 |
このプロシージャは、現行のセッションでインスタンス化されたパッケージのリストを戻します。
構文
DBMS_DEBUG.PRINT_INSTANTIATIONS ( pkgs IN OUT NOCOPY backtrace_table, flags IN BINARY_INTEGER);
パラメータ
表43-32 PRINT_INSTANTIATIONSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
インスタンス化されたパッケージ |
|
オプションのビットマスク:
|
例外
no_target_program
: ターゲット・セッションは現在実行されていません。
使用上の注意
pkgs
の戻り値には、各インスタンス化されたパッケージのprogram_info
が含まれます。有効なフィールドは、Namespace
、Name
、Owner
およびLibunitType
です。
また、Line#には次のビットマスクが含まれます。
1 - ライブラリ・ユニットにデバッグ情報が含まれています。
2 - ライブラリ・ユニットはシュリンクラップされています。
このプロシージャは、サーバー上のDBMS_DEBUG
のバージョン番号を戻します。
構文
DBMS_DEBUG.PROBE_VERSION ( major out BINARY_INTEGER, minor out BINARY_INTEGER);
パラメータ
このプロシージャは、内部一貫性チェックを実行します。 SELF_CHECK
は、プローブ・プロセスが通信可能かどうかを確認するために、通信テストも実行します。
SELF_CHECK
が正常に終了しなかった場合は、このサーバーにインストールされているDBMS_DEBUG
のバージョンが適切ではない可能性があります。 解決方法は、正しいバージョンをインストールすることです(pbload
.sql
を実行すると、DBMS_DEBUG
およびその他の関連パッケージがロードされます)。
構文
DBMS_DEBUG.SELF_CHECK ( timeout IN binary_integer := 60);
パラメータ
例外
表43-35 SELF_CHECKプロシージャの例外
例外 | 説明 |
---|---|
|
プローブのバージョンに一貫性がありません。 |
|
パイプを作成できませんでした。 |
|
パイプにデータを書き込めませんでした。 |
|
パイプからデータを読み込めませんでした。 |
|
パイプ内のデータ型が正しくありませんでした。 |
|
データがパイプ内で混同されていました。 |
これらはすべて致命的な例外です。プローブの正常な実行を妨げる重大な問題であることを示しています。
このファンクションは、現行セッションを持続するためのブレーク・ポイントをプログラム・ユニットに設定します。ターゲット・プログラムがブレーク・ポイントに到達すると、実行は一時停止します。
構文
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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ブレーク・ポイントが設定されるプログラム・ユニットに関する情報(バージョン2.1以降では、ネームスペース、名前、所有者およびDBリンクを |
|
ブレーク・ポイントが設定される行。 |
|
正常に完了すると、ブレーク・ポイントを参照するための一意のブレーク・ポイント番号が含まれます。 |
|
指定した行に実行可能コードがない場合にのみ適用されます。 0(ゼロ)の場合は、 1の場合は、ブレーク・ポイントを設定する行が指定行から順方向に検索されます。 -1の場合は、ブレーク・ポイントを設定する行が指定行から逆方向に検索されます。 |
|
このブレーク・ポイントを通知するまでの待機回数。 |
戻り値
注意: fuzzy およびiterations パラメータは、まだ実装されていません。 |
表43-37 SET_BREAKPOINTファンクションの戻り値
戻り値 | 説明 |
---|---|
|
正常な完了。 |
|
この行にブレーク・ポイントは設定できません。 |
|
該当するプログラム・ユニットが存在しません。 |
このファンクションは、OERブレーク・ポイントを設定します。
構文
DBMS_DEBUG.SET_OER_BREAKPOINT ( oer IN PLS_INTEGER) RETURN PLS_INTEGER;
パラメータ
戻り値
表43-39 SET_OER_BREAKPOINTファンクションの戻り値
戻り値 | 説明 |
---|---|
|
正常な完了。 |
|
該当するブレーク・ポイントが存在しません。 |
このファンクションは、タイムアウト値を設定し、新しいタイムアウト値を戻します。
構文
DBMS_DEBUG.SET_TIMEOUT ( timeout BINARY_INTEGER) RETURN BINARY_INTEGER;
パラメータ
このプロシージャは、タイムアウト発生時のターゲット・セッションの処理方法をプローブに通知します。このコールは、ターゲット・セッションで行われます。
構文
DBMS_DEBUG.SET_TIMEOUT_BEHAVIOUR ( behaviour IN PLS_INTEGER);
パラメータ
表43-41 SET_TIMEOUT_BEHAVIOURプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
再試行します。タイムアウトの効果はありません。timeoutに無限に大きい値を設定した場合と同じです。 |
|
同じイベント・フラグを使用して、実行を継続します。 |
|
debug-modeをオフにして(つまり、 |
|
|
例外
unimplemented: 要求された動作が認識されていません。
使用上の注意
デフォルトの動作(このプロシージャがコールされない場合)は、continue_on_timeout
です。これは、デバッガ・クライアントが(次のイベントで)制御を再確立でき、ターゲット・セッションが無期限にハングアップすることはないためです。
このファンクションは、現在実行中のプログラムに値を設定します。 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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
値を設定するフレーム。0(ゼロ)は現在実行中のフレームを意味します。 |
|
変数を含んだパッケージの説明。 |
|
値を設定するために実行する代入文(有効なPL/SQLである必要があります)。 たとえば、'x := 3;'のように指定します。 このリリースでは、スカラー値のみサポートされています。代入文の右辺はスカラーである必要があります。 |
戻り値
表43-43 SET_VALUEファンクションの戻り値
戻り値 | 説明 |
---|---|
|
- |
|
指定した値を設定できません。 |
|
オブジェクト・タイプは'NOT NULL'で指定されているため、 |
|
値がスカラーではありません。 |
|
代入文をスカラーに変換できません。 たとえば、'x := 3;'(xがレコードの場合)のように指定します。 |
|
次のいずれかです。 - パッケージが存在しません。 - パッケージがインスタンス化されていません。 - ユーザーにパッケージをデバッグする権限がありません。 - オブジェクトがパッケージ内に存在しません。 |
使用上の注意
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;
現行のブレーク・ポイントのリストを戻すプロシージャは、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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ブレーク・ポイントのフォーマット済バッファ(改行を含む)。 ブレーク・ポイント・エントリの索引表。ブレーク・ポイント番号は、表に対する索引で示されます。ブレーク・ポイント番号は1から始まり、削除されると再使用されます。 |
|
ブレーク・ポイント番号で索引付けされた、ブレーク・ポイント・エントリの索引表。 |
|
OERで索引付けされた、OERブレーク・ポイントの索引表。 |
このプロシージャは、ソース・コードを取得します。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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
フェッチする最初の行の行番号(PL/SQLプログラムは、常に行1から始まり、途中の行が抜けることはありません)。 |
|
フェッチする最後の行の行番号。プログラムの行数を超えると行はフェッチされません。 |
|
結果の表。行番号で索引が設定されている場合があります。 |
|
1から開始するフレーム番号。 |
使用上の注意
このファンクションは、任意のフレーム位置で匿名ユニットが実行中であることをバックトレースが示し、ブレーク・ポイントを設定するためにソースを確認する必要があるときのみ使用します。
フレーム番号がスタックの最上部にあり、それが匿名ブロックの場合は、SHOW_SOURCE
も使用できます。
フレーム番号が、ストアドPL/SQLパッケージ、ファンクションまたはプロシージャの場合は、「SHOW_SOURCEプロシージャ」の「使用上の注意」に示すようにSQLを使用します。
このプロシージャは、ソース・コードを取得します。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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
フェッチする最初の行の行番号(PL/SQLプログラムは、常に行1から始まり、途中の行が抜けることはありません)。 |
|
フェッチする最後の行の行番号。プログラムの行数を超えると行はフェッチされません。 |
|
結果の表。行番号で索引が設定されている場合があります。 |
|
行の'ウィンドウ'(現行のソース行の概数)。 |
|
0(ゼロ)以外の場合は、カレント行の前に矢印が出力されます。 |
|
ソース・リストを格納するバッファ。 |
|
バッファの長さ。 |
|
指定したバッファにすべてのソースを格納できない可能性がある場合は、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
は、取り出す必要のある追加ピースの数を戻します)。
このファンクションは、ターゲット・プログラムがイベントを通知するまで待機します。 info_requested
がNULL
でない場合は、GET_RUNTIME_INFO
をコールします。
構文
DBMS_DEBUG.SYNCHRONIZE ( run_info OUT runtime_info, info_requested IN BINARY_INTEGER := NULL) RETURN BINARY_INTEGER;
パラメータ
表43-47 SYNCHRONIZEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
プログラムに関する情報を書き込むためのデータ構造。デフォルトでは、実行中のプログラムおよび一時停止している行に関する情報が含まれます。 |
|
デフォルト( 詳細は、「情報フラグ」を参照してください。 |
戻り値
表43-48 SYNCHRONIZEファンクションの戻り値
戻り値 | 説明 |
---|---|
|
正常な完了。 |
|
プログラムが実行を開始する前にタイムアウトしました。 |
|
その他の通信エラー。 |
このプロシージャは、ターゲット・セッションが現在ストアド・プロシージャを実行中の場合はTRUE
、実行していない場合はFALSE
を戻します。
構文
DBMS_DEBUG.TARGET_PROGRAM_RUNNING RETURN BOOLEAN;