アプリケーションまたはSQLスクリプトでコールされたPL/SQLのデバッグ
ノート:
Visual Studio CodeでのPL/SQLデバッグは、オンプレミス、およびOracle Cloud内のデータベースの両方で機能します。ただし、Oracle Autonomous Databaseは現在サポートされていません。
-
PL/SQLデバッガでは、プロシージャ、ファンクションまたはパッケージのコールをリスニングし、コール時にそれらのデバッグを開始できます。どのアプリケーション(任意のプログラミング言語を使用したWebアプリケーションまたはコマンドライン)でも、どのSQLスクリプトでも、PL/SQLをコールできます。また、そのアプリケーションまたはスクリプトをどのマシンにでも配置できます。
-
PL/SQLデバッグを初めて使用する場合は、PL/SQLデバッガとデータベースを両方構成します。
-
Oracle Database Explorerで、接続名を右クリックし、「PL/SQL Debugger and Compiler Settings」を選択し、デバッガに使用されるIPアドレス(またはホスト名)およびポート番号範囲を設定します(Oracle Databaseは、そのIPアドレス(またはホスト名)、およびそれらのポートのいずれかを使用して再びマシンに接続されます)。
-
権限を付与しデータベースを構成するスクリプトが、同じダイアログで提供されます。そのスクリプトをコピーしてから、データベースの接続ノードを右クリックし、「Open New SQL File」を選択します。スクリプトを新しいファイルに貼り付け、必要に応じてそれを変更してから、エディタを右クリックし、メニューから「Execute All」を選択します。
-
デバッグするPL/SQLプロシージャ、ファンクションまたはパッケージは、デバッグ情報を使用してコンパイルする必要があります。プロシージャ、ファンクションまたはパッケージを右クリックし、メニューから「Compile Debug」を選択します。Oracle Explorerのアイコンが変化して、ユーザーに対して警告が示され、デバッグ完了時に「Compile」を発行してそれらを非デバッグ状態に戻すよう促されます。
-
プロシージャ、ファンクションまたはパッケージを右クリックし、メニューから「Open」または「Open Package Body」を選択します。必要に応じてブレーク・ポイントを設定します(ノート: 条件付きブレーク・ポイントは現在サポートされていません)。
-
デバッガを起動するには、接続名を右クリックし、「Start External Application Debugger」を選択します。「Debug Console」に、使用されているIPアドレスおよびポート番号が表示されます。これらをノートにとります。
-
PL/SQLコールがアプリケーションによって実行されている場合(Oracle JDBCシン・クライアント以外のOracleデータ・アクセス・ドライバを使用)は、そのアプリケーションの環境でORA_DEBUG_JDWP環境変数を
host=hostoripaddress;port=portnumber
という値に設定します。たとえば、host=127.0.0.1;port=65000
のようにします。このIPアドレスとポート番号は、「Debug Console」で通知された値と同じである必要があります。アプリケーションによってOracle Databaseへの接続が実行される前に、この環境変数を設定する必要があります。たとえば、これは、Visual Studio Codeプロジェクトにおいてlaunch.jsonファイル内の構成セクションで設定するか("env": { "ORA_DEBUG_JDWP": "host=127.0.0.1;port=65000" }
など)、アプリケーションを起動する前にコマンドラインで設定することができます。 -
Oracle JDBCシン・クライアントを使用してアプリケーションによってPL/SQLコールが実行されている場合、またはOracleデータベースへの接続時にデバッグを有効にできない場合は、デバッグするストアド・プロシージャ、ファンクションまたはパッケージに対してそのコールを実行する前の、コード内のどこかの時点でDBMS_DEBUG_JDWP.CONNECT_TCPパッケージ・プロシージャをコールするように、コードを変更します。このCONNECT_TCPのコールでは、「Debug Console」で通知されたのと同じIPアドレスおよびポート番号を指定します。たとえば、JDBCを使用する場合は、
String sql = "CALL DBMS_DEBUG_JDWP.CONNECT_TCP(?,?)"; CallableStatement callStmt = conn.prepareCall(sql)); callStmt.setString(1, host); callStmt.setString(2, port); callStmt.execute();
のようにします。コード内の、PL/SQLコールが実行されてデバッグが終了した後のどこかの時点で、DBMS_DEBUG_JDWP.DISCONNECTのコールも追加します。 -
PL/SQLコールがVisual Studio Code内のSQLスクリプトによって実行されている場合は、そのSQLスクリプト内の、デバッグするストアド・プロシージャ、ファンクションまたはパッケージに対してそのコールが実行される前のどこかの時点で、
exec (DBMS_DEBUG_JDWP.CONNECT_TCP('ip address', 'port'));
という行を追加します。例:exec (DBMS_DEBUG_JDWP.CONNECT_TCP('127.0.0.1', '65000'));
このIPアドレスとポート番号は、「Debug Console」で通知された値と同じである必要があります。スクリプト内の、PL/SQLコールが実行されてデバッグが終了した後のどこかの時点で、exec (DBMS_DEBUG_JDWP.DISCONNECT();)
を追加します。 -
アプリケーションまたはSQLスクリプトが実行されると、「Debug Console」に、「A database has connected to the PL/SQL Debugger on host: youripaddress and port: yourport」というメッセージが表示されます。これは、Oracle DatabaseがVisual Studio Codeに正常に再接続されたことと、デバッグを開始できることを示しています。
関連項目:
PL/SQLデバッグの使用方法を示すガイドについては、Visual Studio Codeを使用したPL/SQLのデバッグ(その他)を参照してください。
親トピック: PL/SQLのデバッグ