Oracle SQL Developerのデバッグの方法

OracleのSQL DeveloperのPLSQLのデバッグの方法です。
(確認環境:SQL Developer 19)

目次

デバッグの方法 デバッグの対象のプロシージャ
  デバッグの手順
  ステップ実行を使用する

SQL Developerのダウンロード場所

SQL Developerは、Oracleのソフトで以下から無料でダウンロードできます。
https://www.oracle.com/technetwork/jp/developer-tools/sql-developer/downloads/index.html

 

デバッグの対象のプロシージャ

以下のプロシージャをデバッグします。

create or replace procedure TEST1
(
  id1      IN   number,
  name1    OUT  varchar2,
  romaji1  OUT  varchar2
)
IS
  	CURSOR cur1 IS
		SELECT name,romaji FROM employee
		WHERE id = id1;

	employee_rec cur1%ROWTYPE;

BEGIN
  OPEN cur1;
    FETCH cur1 INTO employee_rec;
  CLOSE cur1;

  name1   := employee_rec.name;
  romaji1 := employee_rec.romaji;
END;

3行目は、入力項目のIDがあります。
4,5行目は、出力項目です。
9,10行目のselect文で条件に一致した項目を取得します。

実際に確認する場合

1.上記のプロシージャを実行します。
2.以下のcreate tableを実行します。

CREATE TABLE employee(
	id NUMBER(6,0),
	name VARCHAR2(20) not null,
	romaji VARCHAR2(20),
	created_at TIMESTAMP,
	updated_at TIMESTAMP,
	primary key(id)
);

3.insert文でデータを登録します。

INSERT INTO employee VALUES (1,'鈴木','suzuki','2022/01/21 12:16:05.337','2022/01/21 12:16:05.337');
INSERT INTO employee VALUES (2,'田中','tanaka','2022/01/21 12:16:05.337','2022/01/21 12:16:05.337');
INSERT INTO employee VALUES (3,'佐藤','sato','2022/01/21 12:16:05.337','2022/01/21 12:16:05.337');

 

デバッグの手順

1.SQL Developerを起動して対象のプロシージャを開き、デバッグの赤いアイコンをクリックします。このプロシージャは、入力(IN)の項目があります(オレンジ枠の箇所)。

 

2.ダイアログの右上にIDの値を入力できる欄があります。
nameとromajiは出力項目なのでN/Aになっていて入力できません。
OKを押すとプロシージャが実行されます。

 

3.エラーが出る場合

「ORA-01031: 権限が不足しています。」のとき

権限がない場合は、画面下のログに以下のメッセージが表示されます。

データベースXE-HRに接続中です。
PL/SQLの実行中: ALTER SESSION SET PLSQL_DEBUG=TRUE
PL/SQLの実行中: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '127.0.0.1', '59613' )
ORA-01031: 権限が不足しています。
ORA-06512: "SYS.DBMS_DEBUG_JDWP", 行68
ORA-06512: 行1
このセッションでは、DEBUG CONNECT SESSIONおよびDEBUG ANY PROCEDUREユーザー権限が必要です。
プロセスが終了しました。
データベースXE-HRから切断中です。

7行目は、「このセッションでは、DEBUG CONNECT SESSIONおよびDEBUG ANY PROCEDUREユーザー権限が必要です。」と表示されています。

表示された権限を付与します。

GRANT DEBUG CONNECT SESSION TO hr;

GRANT DEBUG ANY PROCEDURE TO hr;

hrユーザーにDEBUG CONNECT SESSIONとDEBUG ANY PROCEDUREの権限を付与しています。

 

「ORA-24247: アクセス制御リスト(ACL)によりネットワーク・アクセスが拒否されました」のとき

以下を実行します。

BEGIN
 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
 (
    host => '127.0.0.1',                -- IPアドレス
    lower_port => null,
    upper_port => null,
    ace => xs$ace_type(privilege_list => xs$name_list('jdwp'),
    principal_name => 'system',
    principal_type => xs_acl.ptype_db)
 );
END;

4行目に指定したIPアドレスからの接続を許可します。アスタリスク(*)可能です。ホスト名も可能です。
7行目のjdwpは、Java Debug Wire Protocol(jdwp)のデバッグ操作を有効にします。

https://docs.oracle.com/cd/E57425_01/121/ARPLS/d_networkacl_adm.htm

 

登録した内容は以下のSQLで確認できます。

SELECT * FROM DBA_HOST_ACES

 

登録した内容を削除する場合は以下を実行します。

BEGIN
 DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE
 (
    host => '127.0.0.1',                -- IPアドレス
    lower_port => null,
    upper_port => null,
    ace => xs$ace_type(privilege_list => xs$name_list('jdwp'),
    principal_name => 'system',
    principal_type => xs_acl.ptype_db)
 );
END;

2行目が、APPEND_HOST_ACEからREMOVE_HOST_ACEになっています。

 

4.実行が成功するとログは以下のように表示されます。

 

5.プロシージャから出力された値は、画面下にある「出力変数」タブの変数の箇所をクリックすると値に表示されます。

出力する値が複数のときは、別の変数の箇所をクリックすると値に表示されます。

 

ステップ実行を使用する

ステップ実行は、ブレークポイントを設定して手動で動かしながら確認できます。

1.対象のプロシージャを右クリックし、「デバッグ用にコンパイル」をクリックします。

 

2.プロシージャのコードの左側で左クリックすると赤い丸いアイコンが表示されます。
ブレークポイント(処理が中断する箇所)になります。

 

3.デバッグのアイコンをクリックして処理を動かすとブレークポイントの箇所で止まります。
赤枠の箇所がステップ実行のボタンです。
1行ずつ進めることができます。

関連の記事

Oracle SQL Developerの使い方

△上に戻る