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行ずつ進めることができます。
関連の記事