Oracle Databaseは、大手企業で広く使われているリレーショナルデータベース管理システムであり、その強力な機能と安定性が多くの人に支持されています。実際の開発プロセスでは、開発者はさまざまなビジネス ロジックを実装するためにストアド プロシージャを作成する必要があることが多く、ストアド プロシージャのデバッグ時にいくつかの問題が発生する場合があります。
この記事では、Oracle データベースのストアド プロシージャをデバッグする方法を紹介します。
1. SQL Developer を使用してストアド プロシージャをデバッグする
SQL Developer は、Oracle が公式に提供する無料のデータベース開発ツールで、PL/SQL ストレージのデバッグに使用できる強力なデバッガを提供します。プロシージャ、関数、トリガーなど以下では、単純なストアド・プロシージャを例として、SQL Developerを使用してストアド・プロシージャをデバッグする方法を示します。
1. ストアド プロシージャを作成する
まず、単純なストアド プロシージャを作成する必要があります:
CREATE OR REPLACE PROCEDURE my_proc (p_input IN NUMBER, p_output OUT NUMBER) AS
BEGIN
p_output := p_input * 2;
END;
このストアド プロシージャは、入力パラメーター p_input を受け取り、それを 2 で乗算し、出力パラメーター p_output に割り当てます。実際のシナリオでは、ストアド プロシージャはさらに複雑になりますが、この記事で説明するデバッグ方法は、複雑なストアド プロシージャにも適用できます。
2. ブレークポイントの設定
次に、ストアド プロシージャにブレークポイントを設定して、プログラム フローを一時停止し、実行中に変数値を確認する必要があります。 SQL Developerでのブレークポイントの設定は非常に簡単で、ストアド・プロシージャのコード内でブレークポイントを設定する行を選択し、行番号の隣の空白領域をクリックするだけです。以下の画像に示すように、3 行目にブレークポイントを設定します。
3.ストアド・プロシージャの実行
これで、SQL Developerでストアド・プロシージャを実行し、プロセスの実行中にプログラム・フローを一時停止して変数値を確認できます。次のコードを使用してストアド プロシージャを実行し、パラメータ値を渡すことができます:
DECLARE
v_input NUMBER := 10;
v_output NUMBER;
BEGIN
my_proc(v_input, v_output );
END;
このコードを実行すると、SQL Developerは自動的にデバッガを開き、次の図に示すように3行目でプログラムを一時停止します。 v_input の値が 10 であり、ステップバイステップの実行中に、p_output の値も 20 に割り当てられることがわかります。
4. 変数値の確認
プログラムが一時停止されている間に、各変数の値を確認できます。変数の値を表示するには、コード内で変数名をクリックするか、「モニター」ウィンドウを使用します。 SQL Developerでは、「デバッグ」>「Windowsのデバッグ」>「ウォッチ」メニューを選択し、モニター・ウィンドウに変数を追加することで、複数の変数の値を同時に表示できます。
下図に示すように、モニター ウィンドウに v_input、v_output、p_output を追加しました。それぞれの値が 10、0、0 であることがわかります。
次に、デバッガー ウィンドウの上部にある [実行を続行] ボタンをクリックして、次のブレークポイントまたはプログラムの終わりまでプログラムの実行を継続できます。
2. DBMS_DEBUG パッケージを使用してストアド プロシージャをデバッグする
SQL Developer ツールがない場合は、Oracle が提供する DBMS_DEBUG パッケージを使用してストアド プロシージャをデバッグすることもできます。以下に DBMS_DEBUG パッケージの使用方法を紹介します。
DBMS_DEBUG パッケージは、Oracle Database が提供するツール パッケージです。これを使用すると、ストアド プロシージャにブレークポイントを設定し、プログラムの実行プロセスを一時停止し、プログラム変数の値を確認できます。 DBMS_DEBUG パッケージを使用してストアド プロシージャをデバッグするには、次の手順が必要です:
1. コンパイル オプションの設定
まず、DBMS_DEBUG パッケージを使用できるように、ストアド プロシージャにコンパイル オプションを設定する必要があります。ストアド プロシージャのコードの前に次のステートメントを追加します:
ALTER SESSION SET PLSQL_DEBUG=TRUE;
2. デバッガーを開始します
次に、デバッグを開始する必要があります。ストアド プロシージャ デバイス。次のコードをストアド プロシージャに追加します。
DBMS_DEBUG_DBMS_DEBUG.CONNECT_SESSION;
このコードはデバッガーを起動し、クライアントの接続を待ちます。
3. クライアントへの接続
次に、クライアントのデータベースに接続し、先ほど開始したデバッガーに接続する必要があります。 SQL Plus では、次のコマンドを使用して接続できます:
EXEC DBMS_DEBUG_JDWP.CONNECT_TCP(‘localhost’,4000);
接続が成功すると、「接続されました」というメッセージが表示されます。
4. ブレークポイントの設定
クライアント接続が成功したら、ストアド プロシージャにブレークポイントを設定できます。次のコードを使用して、ストアド プロシージャにブレークポイントを設定します。
DBMS_DEBUG_JDWP.BREAKPOINT('my_proc',4);
このコマンドは、ストアド プロシージャの 4 行目にブレークポイントを設定します。 my_proc はストアド プロシージャの名前です。
5. ストアド プロシージャを実行する
これで、ストアド プロシージャを実行し、実行中にプログラムを一時停止して変数の値を確認できます。
SQL Plus で次のコードを実行します。
DECLARE
v_input NUMBER := 10;
v_output NUMBER;
BEGIN
my_proc(v_input, v_output);
END;
デバッガが正しく設定されている場合、プログラムは 4 行目で一時停止します。一時停止状態では、次のコマンドを使用して変数の値を確認できます:
DBMS_DEBUG_JDWP.PRINT_VARIABLE('v_input');
DBMS_DEBUG_JDWP.PRINT_VARIABLE('v_output');
この2つ このコマンドは変数v_inputとv_outputの値を表示できます。
6. 実行を継続します
変数値を確認した後、プログラムの実行を続行する必要がある場合は、次のコマンドを使用できます:
DBMS_DEBUG_JDWP.CONTINUE;
このコマンドにより、プログラムの実行が続行されます。次の割り込みポイントまたはプログラムが終了するまで実行されます。
概要
Oracle データベースでは、ストアド プロシージャのデバッグは比較的一般的なタスクです。この記事では、SQL DeveloperとDBMS_DEBUGパッケージを使用してストアド・プロシージャをデバッグする2つの方法を紹介します。どの方法を使用する場合でも、ストアド プロシージャにブレークポイントを設定したり、プログラムの実行を一時停止したり、変数の値を確認したりすることが簡単にできるため、開発者は問題を迅速に特定してバグを修正できます。
以上がOracle でストアド プロシージャをデバッグする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。