53 DBMS_DEBUG
DBMS_DEBUGの使用は推奨されていません。かわりにDBMS_DEBUG_JDWPを使用してください。
詳細は、「DBMS_DEBUG_JDWP」を参照してください。
DBMS_DEBUGは、OracleサーバーにおけるPL/SQLデバッガ・レイヤー、プローブに対するPL/SQLインタフェースです。
このパッケージは、主にサーバー側のデバッガを実装することを目的としており、サーバー側のPL/SQLプログラム・ユニットをデバッグする方法を提供します。
ノート:
プログラム・ユニットという用語は、各種のPL/SQLプログラム(プロシージャ、ファンクション、パッケージ、パッケージ本体、トリガー、無名ブロック、オブジェクト・タイプまたはオブジェクト・タイプ本体)のことを指します。
この章のトピックは、次のとおりです:
53.1 DBMS_DEBUGの概要
サーバー側のコードをデバッグするには、2つのデータベース・セッションが必要です。1つはコードをデバッグ・モードで実行するセッション(ターゲット・セッション)、他の1つはそのターゲット・セッションを監視するセッション(デバッグ・セッション)です。
ターゲット・セッションは、DBMS_DEBUGで初期化コールを行うことでデバッグ可能になります。これにより、そのセッションにマークが付けられるため、PL/SQLインタプリタがデバッグ・モードで実行され、デバッグ・イベントが生成されます。デバッグ・イベントが生成されると、それらはセッションから転送されます。ほとんどの場合、デバッグ・イベントには戻り通知が必要なため、インタプリタは応答があるまで一時停止します。
この間に、デバッグ・セッション自体はDBMS_DEBUGを使用して初期化する必要があり、これによって、監視するターゲット・セッションが識別されます。次に、デバッグ・セッションはDBMS_DEBUGのエントリ・ポイントをコールして、ターゲット・セッションから転送されたイベントを読み込み、ターゲット・セッションと通信します。
次のサブプログラムは、ターゲット・セッション(デバッグ対象のセッション)で実行されます。
DBMS_DEBUGは、PL/SQLコンパイラへのインタフェースは提供しませんが、コンパイラがオプションで生成するデバッグ情報には依存します。デバッグ情報がないと、パラメータまたは変数の値の検証や変更を実行できません。
53.2 DBMS_DEBUGの定数
ブレーク・ポイント・ステータスは、値がbreakpoint_status_unused (ブレーク・ポイントは使用されていません)である場合があります。
ブレーク・ポイントが使用されている場合、状態は次の値のマスクになります。
-
breakpoint_status_active: 行ブレーク・ポイント。 -
breakpoint_status_disabled: ブレーク・ポイントは現在使用できません。 -
breakpoint_status_remote: shadowブレーク・ポイント(リモート・ブレーク・ポイントのローカル表示)
53.3 DBMS_DEBUGの変数
DBMS_DEBUGでは、次の表に示す変数が使用されます。
表53-1 DBMS_DEBUGの変数
| 変数 | 説明 |
|---|---|
|
|
タイムアウトの値(両方のセッションが使用)。タイムアウトの最小許容値は1秒です。この値が0 (ゼロ)に設定された場合は、大きい値(3600)が使用されます。 |
53.4 DBMS_DEBUGの例外
この値は、デバッグ・セッション(SYNCHRONIZE、CONTINUE、SET_BREAKPOINTなど)でコールされる様々なファンクションによって戻されます。PL/SQL例外がクライアント/サーバーおよびサーバー/サーバーの境界を越えて発生した場合は、すべて例外となり、エラー・コードは戻されません。
表53-2 DBMS_DEBUGの例外
| ステータス | 説明 |
|---|---|
|
|
正常終了 |
GET_VALUEおよびSET_VALUEによって戻されるステータスは次のとおりです。
表53-3 GET_VALUEおよびSET_VALUEが戻すDBMS_DEBUGの例外
| ステータス | 説明 |
|---|---|
|
|
該当するエントリポイントがスタックにありません。 |
|
|
プログラムがデバッグ記号なしにコンパイルされました。 |
|
|
該当する変数またはパラメータがありません。 |
|
|
デバッグ情報を読み取れません。 |
|
|
オブジェクトが表で、索引が提供されていない場合に |
|
|
該当する要素がコレクション内に存在しません。 |
|
|
表がアトミック |
|
|
値は |
SET_VALUEによって戻されるステータスは次のとおりです。
表53-4 SET_VALUEが戻すDBMS_DEBUGの例外
| ステータス | 説明 |
|---|---|
|
|
制約違反。 |
|
|
制約違反。 |
|
|
指定された値を解読できません。 |
|
|
その他のエラー。 |
|
|
名前をスカラーに変換できません。 |
ブレーク・ポイント・ファンクションによって戻されるステータスは次のとおりです。
表53-5 ブレーク・ポイント・ファンクションによって戻されるステータス
| ステータス | 説明 |
|---|---|
|
|
該当するブレーク・ポイントがありません。 |
|
|
未使用のブレーク・ポイントは使用可能または使用禁止にできません。 |
|
|
指定されたプログラムにブレーク・ポイントを設定できません(存在していないか、またはセキュリティ違反です)。 |
一般的なエラー・コード(多数のDBMS_DEBUGサブプログラムが戻す)は次のとおりです。
表53-6 DBMS_DEBUGサブプログラムのエラー・コード
| ステータス | 説明 |
|---|---|
|
|
機能が実装されていません。 |
|
|
プログラムが実行されていません。操作は延期されました。 |
|
|
サーバー上の |
|
|
タイムアウト以外のエラーが発生しました。 |
|
|
タイムアウトが発生しました。 |
表53-7 illegal_initの例外
| 例外 | 説明 |
|---|---|
|
|
|
次の例外は、プロシージャSELF_CHECKによって発生します。
表53-8 SELF_CHECKプロシージャの例外
| 例外 | 説明 |
|---|---|
|
|
パイプを作成できませんでした。 |
|
|
パイプにデータを書き込めませんでした。 |
|
|
パイプからデータを読み込めませんでした。 |
|
|
パイプ内のデータ・タイプが正しくありませんでした。 |
|
|
データがパイプ内で混同されていました。 |
53.5 DBMS_DEBUGの操作上のノート
デバッグ情報の生成を確認する方法は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;
インタプリタの管理
インタプリタは、次の場合に実行を一時停止します。
-
インタプリタの起動時。実行前に、遅延ブレーク・ポイントをインストールできるようにするため。
-
使用可能なブレーク・ポイントを含んだ行に達したとき。
-
関連のあるイベントが発生した行に達したとき。関連イベントのセットは、
breakflagsパラメータのDBMS_DEBUG.CONTINUEに渡されるフラグで指定します。
セッションの終了
セッション終了のイベントはありません。したがって、ターゲット・セッションが終了していないことを、デバッグ・セッションでチェックして確認する必要があります。ターゲット・セッションが終了した後にDBMS_DEBUG.SYNCHRONIZEをコールすると、タイムアウトするまでデバッグ・セッションがハングアップします。
遅延操作
図では、ターゲット・セッションの前にブレーク・ポイントを設定できることが示されています。これは確かに可能です。この場合、プローブはブレーク・ポイント要求をキャッシュして、最初の同期でターゲット・セッションに送信します。ただし、ブレーク・ポイント要求がこのように遅延した場合は次のようになります。
-
SET_BREAKPOINTはブレーク・ポイント番号を設定しません(必要に応じて後でSHOW_BREAKPOINTSから取得できます)。 -
SET_BREAKPOINTはブレーク・ポイント要求を検証しません。要求されたソース行が存在しない場合は、同期時にエラーが内部的に発生し、ブレーク・ポイントは設定されません。
診断出力
プローブをデバッグするために、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されると、区別できません。
ネームスペース
サーバー上のプログラム・ユニットは、異なるネームスペースに常駐しています。ブレーク・ポイントの設定時には、希望するネームスペースを指定してください。
-
Namespace_cursorにはカーソル(無名ブロック)が含まれています。 -
Namespace_pgkspec_or_toplevelには次が含まれています。-
パッケージの仕様部。
-
他のパッケージ、プロシージャまたはファンクション内にネストされていないプロシージャおよびファンクション
-
オブジェクト・タイプ。
-
-
Namespace_pkg_bodyにはパッケージ本体およびタイプ本体が含まれています。 -
Namespace_triggerにはトリガーが含まれています。
Libunitタイプ
この値は、特定のネームスペースのオブジェクトを一意化するために使用されます。これらの定数は、プローブがスタックのバックトレースを提供しているときに、PROGRAM_INFOで使用されます。
-
LibunitType_cursor -
LibunitType_procedure -
LibunitType_function -
LibunitType_package -
LibunitType_package_body -
LibunitType_trigger -
LibunitType_Unknown
ブレーク・フラグ
この値は、クライアントに関連のあるイベントをプローブに通知するために、CONTINUEに対するbreakflagsパラメータで使用されます。これらのフラグは結合できます。
| 値 | 説明 |
|---|---|
|
|
次のソース行でブレークします(コールをスキップ)。 |
|
|
次のソース行でブレークします(コールを開始)。 |
|
|
現行のエントリポイントから戻された後ブレーク(現行のルーチンからコールされたエントリポイントはすべてスキップ)します。 |
|
|
次回のエントリポイントが戻し処理の準備ができた時点でブレークします。(現行のエントリポイントからコールされたエントリポイントが含まれます。インタプリタが |
|
|
例外が発生したときにブレークします。 |
|
|
例外ハンドラが実行されたときにブレークします。 |
|
|
実行を停止し、 |
情報フラグ
このフラグは、info_requestedパラメータとしてSYNCHRONIZE、CONTINUEおよびGET_RUNTIME_INFOに渡されます。
| フラグ | 説明 |
|---|---|
|
|
スタックの現在の深さを取得します。 |
|
|
ブレーク・ポイント数を取得します。 |
|
|
プログラム・ユニット情報を取得します。 |
中断理由
CONTINUEの実行後、プログラムは最後まで実行されるか、または途中の行でブレークします。
| 理由 | 説明 |
|---|---|
|
|
- |
|
|
インタプリタは起動中です。 |
|
|
ブレーク・ポイントに到達しました。 |
|
|
プロシージャ・エントリ。 |
|
|
プロシージャが戻ります。 |
|
|
プロシージャが終了しました。 |
|
|
改行に到達しました。 |
|
|
割込みが発生しました。 |
|
|
例外が発生しました。 |
|
|
インタプリタは終了処理中です(旧形式)。 |
|
|
カーネルは終了処理中です。 |
|
|
例外ハンドラを起動します。 |
|
|
タイムアウトが発生しました。 |
|
|
インスタンス化ブロック。 |
|
|
インタプリタは異常終了中です。 |
53.6 DBMS_DEBUGのデータ構造
DBMS_DEBUGパッケージでは、レコード・タイプおよび表タイプを定義します。
53.6.1 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);
フィールド
表53-9 BREAKPOINT_INFOフィールド
| フィールド | 説明 |
|---|---|
|
|
プログラム・ユニットの名前。 |
|
|
プログラム・ユニットの所有者。 |
|
|
データベース・リンク(リモートの場合)。 |
|
|
行番号。 |
|
|
ネストされたプロシージャまたはファンクション以外は |
|
|
|
53.6.2 PROGRAM_INFOレコード・タイプ
DBMS_DEBGパッケージの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));フィールド
表53-10 PROGRAM_INFOのフィールド
| フィールド | 説明 |
|---|---|
|
|
ネームスペースの詳細は、「DBMS_DEBUGの操作上のノート」を参照してください。 |
|
|
プログラム・ユニットの名前。 |
|
|
プログラム・ユニットの所有者。 |
|
|
データベース・リンク(リモートの場合)。 |
|
|
行番号。 |
|
|
読取り専用フィールド。ネストされたプロシージャまたはファンクション以外は |
|
|
読取り専用フィールド。同じネームスペースを共有するオブジェクト(プロシージャやパッケージ仕様部など)を一意化します。 libunitタイプの詳細は、「DBMS_DEBUGの操作上のノート」を参照してください。 |
53.6.3 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);フィールド
表53-11 RUNTIME_INFOのフィールド
| フィールド | 説明 |
|---|---|
|
|
|
|
|
プログラムが終了しているかどうか |
|
|
ブレーク・ポイント番号 |
|
|
スタック上のフレームの数 |
|
|
[予約フィールド] |
|
|
中断理由 |
|
|
ソースの場所 |
53.6.4 BACKTRACE_TABLE表タイプ
このタイプは、PRINT_BACKTRACEで使用されます。
構文
TYPE backtrace_table IS TABLE OF program_info INDEX BY BINARY_INTEGER;
53.6.5 BREAKPOINT_TABLE表タイプ
このタイプは、SHOW_BREAKPOINTSで使用されます。
構文
TYPE breakpoint_table IS TABLE OF breakpoint_info INDEX BY BINARY_INTEGER;
53.6.6 INDEX_TABLE表タイプ
このタイプは、索引表で使用可能な索引を戻すために、GET_INDEXESで使用されます。
構文
TYPE index_table IS table of BINARY_INTEGER INDEX BY BINARY_INTEGER;
53.7 DBMS_DEBUGサブプログラムの要約
この表は、DBMS_DEBUGサブプログラムをアルファベット順に示し、簡単に説明しています。
表53-12 DBMS_DEBUGパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
デバッグ・セッションにターゲット・デバッグIDに関する情報を通知します。 |
|
|
ターゲット・プログラムの実行を継続します。 |
|
|
デバッグ・モードをオフにします。 |
|
|
デバッグ・モードをオンにします。 |
|
|
ブレーク・ポイントを削除します。 |
|
|
OERブレーク・ポイントを削除します。 |
|
|
ターゲット・プログラムのデバッグを停止します。 |
|
|
ブレーク・ポイントを無効にします。 |
|
|
既存のブレーク・ポイントをアクティブにします。 |
|
|
ターゲット・セッションでSQLまたはPL/SQLを実行します。 |
|
|
索引表に対する一連の索引を戻します。 |
|
|
SHOW_SOURCEの使用時に、バッファ・オーバーフローが起きたときに追加ソースを提供します。 |
|
|
プログラム・ユニット内の行番号に関する情報を戻します。 |
|
|
現行のプログラムに関する情報を戻します。 |
|
|
現行のタイムアウト動作を戻します。 |
|
|
現在実行中のプログラムから値を取得します。 |
|
|
ターゲット・セッションのデバッグIDを設定します。 |
|
|
ターゲット・セッションがタイムアウトしないようにpingします。 |
|
|
スタックのバックトレースを印刷します。 |
|
|
スタックのバックトレースを印刷します。 |
|
|
サーバー上の |
|
|
内部一貫性チェックを実行します。 |
|
|
プログラム・ユニットにブレーク・ポイントを設定します。 |
|
|
OERブレーク・ポイントを設定します。 |
|
|
タイムアウト値を設定します。 |
|
|
タイムアウトの発生時に、ターゲット・セッションに行う処理をプローブに指示します。 |
|
|
現在実行中のプログラムに値を設定します。 |
|
|
現行のブレーク・ポイントのリストを戻します。 |
|
|
フレーム・ソースをフェッチします。 |
|
|
プログラム・ソースをフェッチします。 |
|
|
プログラムの実行開始を待機します。 |
|
|
ターゲット・セッションが現在ストアド・プロシージャを実行中の場合は |
53.7.1 ATTACH_SESSIONプロシージャ
このプロシージャは、ターゲット・プログラムに関する情報をデバッグ・セッションに通知します。
構文
DBMS_DEBUG.ATTACH_SESSION ( debug_session_id IN VARCHAR2, diagnostics IN BINARY_INTEGER := 0);
パラメータ
表53-13 ATTACH_SESSIONプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ターゲット・セッションの |
|
|
0(ゼロ)以外の場合に診断出力を生成します。 |
53.7.2 CONTINUEファンクション
このファンクションは、指定されたブレーク・フラグ(関連のあるイベントのマスク)をターゲット・プロセスのプローブに渡します。プローブに、ターゲット・プロセスの実行を継続するように通知し、ターゲット・プロセスが実行を終了するか、またはイベントを通知するまで待機します。
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;
パラメータ
表53-14 CONTINUEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
プログラムの状態に関する情報。 |
|
|
対象となるイベントのマスク(「DBMS_DEBUGの操作上のノート」のブレーク・フラグの説明を参照)。 |
|
|
プログラムが停止したときに、 |
戻り値
表53-15 CONTINUEファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
|
|
|
プログラムが実行を開始する前にタイムアウトしました。 |
|
|
その他の通信エラー。 |
53.7.3 DEBUG_OFFプロシージャ
このプロシージャは、そのセッションでデバッグを実行する必要がなくなったことをターゲット・セッションに通知します。セッションの終了前にこのファンクションをコールする必要はありません。
警告:
immediateがTRUEの場合、デバッグ・セッションは待機する必要があります。
構文
DBMS_DEBUG.DEBUG_OFF;
使用上のノート
サーバーは、このエントリポイントを特別には処理しません。したがって、このエントリポイントをデバッグしようとします。
53.7.4 DEBUG_ONプロシージャ
このプロシージャは、すべてのPL/SQLがデバッグ・モードで実行されるように、ターゲット・セッションにマークを設定します。この処理は、デバッグの開始前に実行する必要があります。
構文
DBMS_DEBUG.DEBUG_ON ( no_client_side_plsql_engine BOOLEAN := TRUE, immediate BOOLEAN := FALSE);
パラメータ
表53-16 DEBUG_ONプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
デバッグ・セッションがクライアント側のPL/SQLエンジンから起動されていないかぎり、デフォルト値のままにしてください。 |
|
|
|
53.7.5 DELETE_BREAKPOINTファンクション
このファンクションはブレーク・ポイントを削除します。
構文
DBMS_DEBUG.DELETE_BREAKPOINT ( breakpoint IN BINARY_INTEGER) RETURN BINARY_INTEGER;
パラメータ
表53-17 DELETE_BREAKPOINTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
以前の |
戻り値
表53-18 DELETE_BREAKPOINTファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
|
|
|
該当するブレーク・ポイントが存在しません。 |
|
|
未使用のブレーク・ポイントは削除できません。 |
|
|
ブレーク・ポイントが設定された後にプログラム・ユニットが再定義されました。 |
53.7.6 DELETE_OER_BREAKPOINTファンクション
このファンクションは、OERブレーク・ポイントを削除します。
構文
DBMS_DEBUG.DELETE_OER_BREAKPOINT ( oer IN PLS_INTEGER) RETURN PLS_INTEGER;
パラメータ
表53-19 DELETE_OER_BREAKPOINTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
削除するOER(4バイトの正数)。 |
53.7.7 DETACH_SESSIONプロシージャ
このプロシージャは、ターゲット・プログラムのデバッグを停止します。
このプロシージャはいつでもコール可能ですが、デバッグ・セッションの連結が解除されたことはターゲット・セッションに通知されず、ターゲット・セッションの実行は終了しません。したがって、ターゲット・セッションが独自にハングアップしないように注意してください。
構文
DBMS_DEBUG.DETACH_SESSION;
53.7.8 DISABLE_BREAKPOINTファンクション
このファンクションは、既存のブレーク・ポイントを使用禁止にしますが、削除しないでそのまま残します。
構文
DBMS_DEBUG.DISABLE_BREAKPOINT ( breakpoint IN BINARY_INTEGER) RETURN BINARY_INTEGER;
パラメータ
表53-20 DISABLE_BREAKPOINTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
以前の |
戻り値
表53-21 DISABLE_BREAKPOINTファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
|
|
|
該当するブレーク・ポイントが存在しません。 |
|
|
未使用のブレーク・ポイントは使用禁止にできません。 |
53.7.9 ENABLE_BREAKPOINTファンクション
このファンクションは、使用禁止の逆の処理を実行します。以前に使用禁止にしたブレーク・ポイントを使用可能にします。
構文
DBMS_DEBUG.ENABLE_BREAKPOINT ( breakpoint IN BINARY_INTEGER) RETURN BINARY_INTEGER;
パラメータ
表53-22 ENABLE_BREAKPOINTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
以前の |
戻り値
表53-23 ENABLE_BREAKPOINTファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
成功。 |
|
|
該当するブレーク・ポイントが存在しません。 |
|
|
未使用のブレーク・ポイントは使用可能にできません。 |
53.7.10 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);
パラメータ
表53-24 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;53.7.11 GET_INDEXESファンクション
変数またはパラメータの名前を指定すると、索引表の場合はその一連の索引を戻します。索引表以外の場合はエラーが戻されます。
構文
DBMS_DEBUG.GET_INDEXES ( varname IN VARCHAR2, frame# IN BINARY_INTEGER, handle IN program_info, entries OUT index_table) RETURN BINARY_INTEGER;
パラメータ
表53-25 GET_INDEXESファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
索引情報を取得する変数の名前。 |
|
|
変数またはパラメータが常駐しているフレームの番号。パッケージ変数の場合は |
|
|
パッケージの説明(オブジェクトがパッケージ変数の場合)。 |
|
|
1ベースの索引表: |
戻り値
表53-26 GET_INDEXESファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
次のうちの1つ。 - パッケージが存在しません。 - パッケージがインスタンス化されていません。 - ユーザーにパッケージをデバッグする権限がありません。 - オブジェクトがパッケージ内に存在しません。 |
53.7.12 GET_MORE_SOURCEプロシージャ
フォーマット済バッファを生成したSHOW_SOURCEプロシージャの該当バージョンによって提供されたバッファにソースが収まらない場合、このプロシージャが追加ソースを提供します。
構文
DBMS_DEBUG.GET_MORE_SOURCE ( buffer IN OUT VARCHAR2, buflen IN BINARY_INTEGER, piece# IN BINARY_INTEGER);
パラメータ
表53-27 GET_MORE_SOURCEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
バッファ |
|
|
バッファの長さ。 |
|
|
2とSHOW_SOURCEプロシージャの適切なバージョンへのコールからパラメータの各部分に戻された値との間の値 |
使用上のノート
このプロシージャは、フォーマット済バッファを戻すSHOW_SOURCEの該当バージョンの後にのみコールします。
関連項目
53.7.13 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;
パラメータ
表53-28 GET_LINE_MAPファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
トップレベルのプログラム・ユニット(プロシージャ、パッケージ、ファンクション、パッケージ本体など)。 |
|
|
'program'内で最大のソース・コード行番号。 |
|
|
'program'内のサブプログラムの数。 |
|
|
'program'の実行可能行を表すビットマップ。行番号Nが実行可能である場合、ビット番号N MOD 8がラインマップ位置N / 8で1に設定されます。戻されるラインマップの長さは、 |
戻り値
表53-29 GET_LINE_MAPファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
正常な完了。 |
|
|
プログラム・ユニットは存在しますが、デバッグ情報がありません。 |
|
|
該当するプログラム・ユニットが存在しません。 |
53.7.14 GET_RUNTIME_INFOファンクション
このファンクションは、現行のプログラムに関する情報を戻します。これは、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;
パラメータ
表53-30 GET_RUNTIME_INFOファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
プログラムが停止したときに、 |
|
|
プログラムの状態に関する情報。 |
53.7.15 GET_TIMEOUT_BEHAVIOURファンクション
このプロシージャは、現行のタイムアウト動作を戻します。このコールは、ターゲット・セッションで行われます。
構文
DBMS_DEBUG.GET_TIMEOUT_BEHAVIOUR RETURN BINARY_INTEGER;
パラメータ
表53-31 GET_TIMEOUT_BEHAVIOURファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
OER(4バイトの正数) |
戻り値
表53-32 GET_TIMEOUT_BEHAVIOURファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
正常な完了。 |
情報フラグ
info_getOerInfo CONSTANT PLS_INTEGER:= 32;
使用上のノート
OERブレーク・ポイントでサポートされている機能は、コード・ブレーク・ポイントと比較すると少なくなります。特に、次の点に注意してください。
-
ブレーク・ポイント番号は戻されず、かわりにOERの番号が使用されます。したがって、指定したOERに複数のブレーク・ポイントは設定できません(操作できません)。
-
OERブレーク・ポイントは使用禁止にできません(ただし、クライアントは、これを削除して自由にシミュレートできます)。
-
OERブレーク・ポイントは、
delete_oer_breakpointを使用して削除されます。
53.7.16 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;
パラメータ
表53-33 GET_VALUEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
変数またはパラメータの名前。 |
|
|
値が存在するフレーム。0(ゼロ)の場合は現行のプロシージャです。 |
|
|
値 |
|
|
使用するオプションの日付書式(指定する必要がある場合)。 |
戻り値
表53-34 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;
パラメータ
表53-35 GET_VALUEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
変数またはパラメータの名前。 |
|
|
変数を含んだパッケージの説明。 |
|
|
値 |
|
|
使用するオプションの日付書式(指定する必要がある場合)。 |
戻り値
表53-36 GET_VALUEファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
次のうちの1つ。 - パッケージが存在しません。 - パッケージがインスタンス化されていません。 - ユーザーにパッケージをデバッグする権限がありません。 - オブジェクトがパッケージ内に存在しません。 |
|
|
オブジェクトは表ですが、索引が提供されていません。 |
例
この例は、スキーマ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;53.7.17 INITIALIZEファンクション
このファンクションは、デバッグ用にターゲット・セッションを初期化します。
構文
DBMS_DEBUG.INITIALIZE ( debug_session_id IN VARCHAR2 := NULL, diagnostics IN BINARY_INTEGER := 0) RETURN VARCHAR2;
パラメータ
表53-37 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権限を検索するチェックは、セッションのログイン・ユーザー、このコールが行われた瞬間のセッション・レベルで使用可能になったロール(そのロールがコールの定義者権限環境内で使用できない場合でも同様)およびデバッグ・ロールのコンテキストで行われます。
53.7.18 PINGプロシージャ
このプロシージャは、ターゲット・セッションがタイムアウトしないように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;
53.7.19 PRINT_BACKTRACEプロシージャ
このプロシージャは、現在の実行スタックのバックトレース・リストを出力します。これは、プログラムが実行中の場合のみコールしてください。
PRINT_BACKTRACEプロシージャは、2種類オーバーロードされています。
構文
DBMS_DEBUG.PRINT_BACKTRACE ( listing IN OUT VARCHAR2); DBMS_DEBUG.PRINT_BACKTRACE ( backtrace OUT backtrace_table);
パラメータ
表53-38 PRINT_BACKTRACEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
埋込み改行付きのフォーマット済文字バッファ。 |
|
|
バックトレース・エントリ1ベースの索引表。現在実行中のプロシージャは、表の最終エントリです(つまり、フレーム番号は、 |
53.7.20 PRINT_INSTANTIATIONSプロシージャ
このプロシージャは、現行のセッションでインスタンス化されたパッケージのリストを戻します。
構文
DBMS_DEBUG.PRINT_INSTANTIATIONS ( pkgs IN OUT NOCOPY backtrace_table, flags IN BINARY_INTEGER);
パラメータ
表53-39 PRINT_INSTANTIATIONSプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
インスタンス化されたパッケージ |
|
|
オプションのビットマスク:
|
例外
no_target_program: ターゲット・セッションは現在実行されていません。
使用上のノート
pkgsの戻り値には、各インスタンス化されたパッケージのprogram_infoが含まれます。有効なフィールドは、Namespace、Name、OwnerおよびLibunitType です。
また、Line#には次のビットマスクが含まれます。
-
1 - ライブラリ・ユニットにデバッグ情報が含まれています。
-
2 - ライブラリ・ユニットはシュリンクラップされています。
53.7.21 PROBE_VERSIONプロシージャ
このプロシージャは、サーバー上のDBMS_DEBUGのバージョン番号を戻します。
構文
DBMS_DEBUG.PROBE_VERSION ( major out BINARY_INTEGER, minor out BINARY_INTEGER);
パラメータ
表53-40 PROBE_VERSIONプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
バージョン番号。 |
|
|
リリース番号: 機能が追加されるたびに増加します。 |
53.7.22 SELF_CHECKプロシージャ
このプロシージャは、内部一貫性チェックを実行します。SELF_CHECKは、プローブ・プロセスが通信可能かどうかを確認するために、通信テストも実行します。
SELF_CHECKが正常に終了しなかった場合は、このサーバーにインストールされているDBMS_DEBUGのバージョンが適切ではない可能性があります。解決方法は、正しいバージョンをインストールすることです(pbload.sqlを実行すると、DBMS_DEBUGおよびその他の関連パッケージがロードされます)。
構文
DBMS_DEBUG.SELF_CHECK ( timeout IN binary_integer := 60);
パラメータ
表53-41 SELF_CHECKプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
通信テストに使用するタイムアウト時間。デフォルトは60秒です。 |
例外
表53-42 SELF_CHECKプロシージャの例外
| 例外 | 説明 |
|---|---|
|
|
プローブのバージョンに一貫性がありません。 |
|
|
パイプを作成できませんでした。 |
|
|
パイプにデータを書き込めませんでした。 |
|
|
パイプからデータを読み込めませんでした。 |
|
|
パイプ内のデータ・タイプが正しくありませんでした。 |
|
|
データがパイプ内で混同されていました。 |
これらはすべて致命的な例外です。プローブの正常な実行を妨げる重大な問題であることを示しています。
53.7.23 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;
パラメータ
表53-43 SET_BREAKPOINTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ブレーク・ポイントが設定されるプログラム・ユニットに関する情報。(バージョン2.1以上では、ネームスペース、名前、所有者およびdblinkを |
|
|
ブレーク・ポイントが設定される行。 |
|
|
正常に完了すると、ブレーク・ポイントを参照するための一意のブレーク・ポイント番号が含まれます。 |
|
|
指定した行に実行可能コードがない場合にのみ適用されます。 0(ゼロ)の場合は、 1の場合は、ブレーク・ポイントを設定する行が指定行から順方向に検索されます。 -1の場合は、ブレーク・ポイントを設定する行が指定行から逆方向に検索されます。 |
|
|
このブレーク・ポイントを通知するまでの待機回数。 |
戻り値
ノート:
fuzzyおよびiterationsパラメータは、まだ実装されていません。
表53-44 SET_BREAKPOINTファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
正常な完了。 |
|
|
この行にブレーク・ポイントは設定できません。 |
|
|
該当するプログラム・ユニットが存在しません。 |
53.7.24 SET_OER_BREAKPOINTファンクション
このファンクションは、OERブレーク・ポイントを設定します。
構文
DBMS_DEBUG.SET_OER_BREAKPOINT ( oer IN PLS_INTEGER) RETURN PLS_INTEGER;
パラメータ
表53-45 SET_OER_BREAKPOINTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
設定するOER(4バイトの正数)。 |
戻り値
表53-46 SET_OER_BREAKPOINTファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
正常な完了。 |
|
|
該当するブレーク・ポイントが存在しません。 |
53.7.25 SET_TIMEOUTファンクション
このファンクションは、タイムアウト値を設定し、新しいタイムアウト値を戻します。
構文
DBMS_DEBUG.SET_TIMEOUT ( timeout BINARY_INTEGER) RETURN BINARY_INTEGER;
パラメータ
表53-47 SET_TIMEOUTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ターゲットとデバッグ・セッション間の通信に使用されるタイムアウト |
53.7.26 SET_TIMEOUT_BEHAVIOURプロシージャ
このプロシージャは、タイムアウト発生時のターゲット・セッションの処理方法をプローブに通知します。このコールは、ターゲット・セッションで行われます。
構文
DBMS_DEBUG.SET_TIMEOUT_BEHAVIOUR ( behaviour IN PLS_INTEGER);
パラメータ
表53-48 SET_TIMEOUT_BEHAVIOURプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
|
|
|
再試行します。タイムアウトの効果はありません。timeoutに無限に大きい値を設定した場合と同じです。 |
|
|
同じイベント・フラグを使用して、実行を継続します。 |
|
|
debug-modeをオフにして(つまり、 |
|
|
|
例外
unimplemented: 要求された動作が認識されていません。
使用上のノート
デフォルトの動作(このプロシージャがコールされない場合)は、continue_on_timeoutです。これは、デバッガ・クライアントが(次のイベントで)制御を再確立でき、ターゲット・セッションが無期限にハングアップすることはないためです。
53.7.27 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;
パラメータ
表53-49 SET_VALUEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
値を設定するフレーム。0(ゼロ)は現在実行中のフレームを意味します。 |
|
|
変数を含んだパッケージの説明。 |
|
|
値を設定するために実行する代入文(有効なPL/SQLである必要があります)。たとえば、x := 3;のように指定します。 このリリースでは、スカラー値のみサポートされています。代入文の右辺はスカラーである必要があります。 |
戻り値
表53-50 SET_VALUEファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
- |
|
|
指定した値を設定できません。 |
|
|
オブジェクト・タイプは'NOT |
|
|
値がスカラーではありません。 |
|
|
代入文をスカラーに変換できません。たとえば、'x := 3;'(xがレコードの場合)のように指定します。 |
|
|
次のうちの1つ。 - パッケージが存在しません。 - パッケージがインスタンス化されていません。 - ユーザーにパッケージをデバッグする権限がありません。 - オブジェクトがパッケージ内に存在しません。 |
使用上のノート
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;
53.7.28 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);
パラメータ
表53-51 SHOW_BREAKPOINTSプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ブレーク・ポイントのフォーマット済バッファ(改行を含む)。 ブレーク・ポイント・エントリの索引表。ブレーク・ポイント番号は、表に対する索引で示されます。ブレーク・ポイント番号は1から始まり、削除されると再使用されます。 |
|
|
ブレーク・ポイント番号で索引付けされた、ブレーク・ポイント・エントリの索引表。 |
|
|
OERで索引付けされた、OERブレーク・ポイントの索引表。 |
53.7.29 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);
パラメータ
表53-52 SHOW_FRAME_SOURCEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
フェッチする最初の行の行番号(PL/SQLプログラムは、常に行1から始まり、途中の行が抜けることはありません)。 |
|
|
フェッチする最後の行の行番号。プログラムの行数を超えると行はフェッチされません。 |
|
|
結果の表。行番号で索引が設定されている場合があります。 |
|
|
1から開始するフレーム番号。 |
使用上のノート
-
このファンクションは、任意のフレーム位置で匿名ユニットが実行中であることをバックトレースが示し、ブレーク・ポイントを設定するためにソースを確認する必要があるときのみ使用します。
-
フレーム番号がスタックの最上部にあり、それが匿名ブロックの場合は、
SHOW_SOURCEも使用できます。 -
フレーム番号が、ストアドPL/SQLパッケージ、ファンクションまたはプロシージャの場合は、「SHOW_SOURCEプロシージャ」の「使用上のノート」に示すようにSQLを使用します。
53.7.30 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);
パラメータ
表53-53 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は、取り出す必要のある追加ピースの数を戻します)。
53.7.31 SYNCHRONIZEファンクション
このファンクションは、ターゲット・プログラムがイベントを通知するまで待機します。info_requestedがNULLでない場合は、GET_RUNTIME_INFOをコールします。
構文
DBMS_DEBUG.SYNCHRONIZE ( run_info OUT runtime_info, info_requested IN BINARY_INTEGER := NULL) RETURN BINARY_INTEGER;
パラメータ
表53-54 SYNCHRONIZEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
プログラムに関する情報を書き込むためのデータ構造。デフォルトでは、実行中のプログラムおよび一時停止している行に関する情報が含まれます。 |
|
|
デフォルト( |
戻り値
表53-55 SYNCHRONIZEファンクションの戻り値
| 戻り値 | 説明 |
|---|---|
|
|
正常な完了。 |
|
|
プログラムが実行を開始する前にタイムアウトしました。 |
|
|
その他の通信エラー。 |


