Oracle SQL Developerを使用したPL/SQLの開発とデバッグ

<このテキストを削除しないでください。これは、ブラウザ実行時に生成される"主要"なトピック一覧のプレースホルダです。>

目的

このチュートリアルでは、Oracle SQL Developerを使用したPL/SQLプロシージャの作成、実行、デバッグ方法について説明します。

所要時間

約30分

概要

Oracle SQL Developerは、生産性を強化し、データベース開発作業を簡素化する無償のグラフィカル・ツールです。 Oracle SQL Developerを使用すると、データベース・オブジェクトを参照し、SQL文とSQLスクリプトを実行し、PL/SQL文を編集およびデバッグすることができます。 また、提供されているレポートを実行したり、独自のレポートを作成して保存したりすることも可能です。 このチュートリアルでは、PL/SQLの作成、コンパイル、実行、デバッグを中心に説明します。

前提条件

このチュートリアルを始める前に以下のことを確認してください。

.

Oracle SQL Developer 3.0をOTNサイトからダウンロードして、インストールしていること。 指示に従ってインストールしていること。

.

Oracle Database 11gおよびサンプル・スキーマをインストールしていること。

.

HRユーザーをアンロックしていること。 SYSユーザーとしてSQL Developerにログインし、次のコマンドを実行します。
alter user hr identified by hr account unlock;
grant debug connect session to hr;
grant debug any procedure to hr

注: このチュートリアルは、Oracle SQL Developer 3.0を使用して開発されています。 ただし、Oracle SQL Developer 2.1.1を使用することもできます。

.

files.zipをダウンロードし、ファイル・システム上のローカル・フォルダに解凍していること。 このチュートリアルでは、C:\sqldev3.0フォルダを使用しています。

データベース接続の作成

Oracle SQL Developer 3.0を使用してデータベース・オブジェクトを管理するための最初の手順は、データベース接続を作成することです。 次の手順を実行します。

.

デスクトップにSQL Developerアイコンがインストールされている場合、アイコンをクリックしてSQL Developerを起動したら、ステップ4へ進みます。デスクトップにアイコンがない場合は、次の手順を実行して、SQL Developer 3.0をデスクトップから直接起動するためのショートカットを作成します。

SQL Developer 3.0がインストールされているディレクトリを開き、「sqldeveloper.exe」(Windowsの場合)または「sqldeveloper.sh」(Linuxの場合)を右クリックして「Send to」→「Desktop (create shortcut)」を選択します。

 

.

デスクトップ上に、sqldeveloper.exeへのショートカットが作成されています。 このアイコンをダブルクリックして、SQL Developer 3.0を開きます。

注: アイコンの名前を変更するには、アイコンを選択してから[F2]キーを押し、新しい名前を入力します。

 

.

Oracle SQL Developerが表示されます。

 

.

Connectionsタブで、「Connections」を右クリックし、「New Connection」を選択します。

 

.

New/Select Database Connectionダイアログが表示されます。 次の接続情報を入力し、「Test」をクリックします。

Connection Name: HR_ORCL
Username: hr
Password: <ご使用のシステムのパスワード>
Hostname: localhost
Port: 1521
SID: <ご使用のSID>

 

.

左下(Helpボタンの上)に表示される接続ステータスを確認します。 Successと表示されているはずです。 「Connect」をクリックします。 「Save」をクリックします。

 

.

接続が保存され、新しく作成した接続がConnectionsリストに表示されます。

接続が作成されると、自動的にSQL Worksheetが開きます。 SQL Worksheetを使用すると、先ほど開いた接続に対してSQLを実行できます。 「HR_ORCL」接続を展開します。

 

PL/SQLプロシージャの作成とコンパイル

ここでは、PL/SQLプロシージャの作成、編集、コンパイルを実行します。 次の手順を実行します。

.

Connectionsナビゲータで、「Procedures」ノードを右クリックし、コンテキスト・メニューから「New Procedure」を選択します。

 

.

プロシージャ名としてEMP_LISTと入力し、「」をクリックしてパラメータを追加します。 パラメータ名をダブルクリックし、pMaxRowsに変更します。 TypeをVARCHAR2からNUMBERに変更します。 「OK」をクリックします。

 

.

プロシージャが作成されました。

注: この時点で作成されているのは、プロシージャの枠組みのみです。 次のステップでは、このプロシージャ内にPL/SQLコードを追加していきます。

 

.

次のPL/SQLコードを新しいコードで置き換えます。

BEGIN
  NULL;
END EMP_LIST;

新しいコード:

(注: このコードは、前提条件セクションでファイルを解凍したディレクトリにあるemp_cursor.sqlファイルに含まれています。)

CURSOR emp_cursor IS
SELECT l.state_province, l.country_id, d.department_name, e.last_name,
j.job_title, e.salary, e.commission_pct
FROM locations l, departments d, employees e, jobs j
WHERE l.location_id = d.location_id
AND d.department_id = e.department_id
AND e.job_id = j.job_id;
emp_record emp_cursor%ROWTYPE;
TYPE emp_tab_type IS TABLE OF emp_cursor%ROWTYPE INDEX BY BINARY_INTEGER;
emp_tab emp_tab_type;
i NUMBER := 1;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO emp_record;
emp_tab(i) := emp_record;
WHILE ((emp_cursor%FOUND) AND (i <= pMaxRows) LOOP
i := i + 1;
FETCH emp_cursor INTO emp_record;
emp_tab(i) := emp_record;
END LOOP;
CLOSE emp_cursor;
FOR j IN REVERSE 1..i LOOP
DBMS_OUTPUT.PUT_LINE(emp_tab(j).last_name);
END LOOP;
END;

Oracle SQL Developerによって予約語が整形されている点に注意してください。 さらにコードを整形するには、コード・エディタ内を右クリックし、サブメニューから「Format」を選択します。

ツールバーからSave「」をクリックして、PL/SQLのサブプログラムをコンパイルします。

 

.

コンパイル・エラーが生じた場合は、エラー・メッセージが表示されます。

 

.

ナビゲータで「Procedures」を展開すると、EMP_LISTが表示されます。

Oracle SQL Developerによって無効なPL/SQLサブプログラムが検出された場合、Connectionsナビゲータで、無効のステータスを示す赤いX印がそのサブプログラムのアイコン上に表示されます。

 

.

コンパイル・エラーがログ・ウィンドウに表示されています。 エラーをダブルクリックするだけで、そのエラーが報告されている行へ移動できます。 また、Oracle SQL Developerでは右側の余白にエラーとヒントが表示されています。 余白に表示された赤い横線にカーソルを合わせると、エラー・メッセージが表示されます。

ここでは、LOOP文に書式エラーがあることを示すエラー・メッセージが表示されています。 コードを詳しく確認すると、WHILE文に余分な丸括弧が含まれていることが分かります。 この余分な丸括弧を削除します。

 

.

Compile」をクリックします。

 

.

プロシージャが正しくコンパイルされました。 これで、プロシージャを実行する準備が整いました。

注: Proceduresノードに表示されたプロシージャのアイコン上に、赤いX印が表示されたままになっている場合、「refresh」アイコンをクリックしてください。 緑色のオーバーレイは、このプロシージャがデバッグ用にコンパイルされていることを意味します。 オーバーレイが表示されない場合、このプロシージャはデバッグ・ディレクティブなしでコンパイルされています。 これらはプリファレンス設定とコンパイルのドロップダウン・リスト・オプションによって制御されています。 SQL Developerでのデフォルトは、"Compile for Debug"です。

 

PL/SQLプロシージャの実行

PL/SQLプロシージャを作成し、コンパイルしたら、Oracle SQL Developerを使用してこれを実行します。 次の手順を実行します。

.

Connectionsナビゲータの「EMP_LIST」を右クリックし、「Run」を選択します。

 

.

Run PL/SQLダイアログが表示されます。 Run PL/SQLダイアログでは、実行対象のプロシージャまたはファンクションを選択することができ(パッケージの場合に有用)、選択したプログラムのパラメータ・リストが表示されます。 PL/SQLブロックのテキスト領域には生成されたコードが表示されており、Oracle SQL Developerがプログラムを呼び出す際に使用されます。 この領域を使用すると、プログラム・ユニットに渡すパラメータの値を代入したり、複雑な戻り型を処理したりすることができます。

EMP_LISTプロシージャには、PMAXROWSという名前のパラメータが定義されています。 Run PL/SQLダイアログで、このパラメータを任意の数値に初期化できます。

PMAXROWS := NULL;からPMAXROWS := 5;へ変更し、「OK」をクリックします。

 

.

Running - Logウィンドウに結果が表示されます。

 

PL/SQLプロシージャのデバッグ

Oracle SQL Developerでは、Oracleデータベースを使用したPL/SQLのデバッグがサポートされています。 ここでは、PL/SQLプロシージャのデバッグを行い、コードをステップ・スルーして実行時に値を変更します。 次の手順を実行します。

.

デバッグしやすいように、Codeウィンドウに行番号を追加できます。 余白を右クリックして、「Toggle Line Numbers」を選択します。

 

.

プロシージャをデバッグするには、はじめにデバッグ用コンパイルを実行する必要があります。 このステップによって、デバッグに必要なコンパイラ・ディレクティブが追加されます。 デバッグが完了したら、プロシージャを再度コンパイルして、余分なディレクティブを削除する必要があります。

 

.

ブレーク・ポイントは、コード内の停止点として指定する場所です。 デバッグ・モードでコードを実行すると、ブレーク・ポイントで実行が停止します。

OPEN emp_cursor;文が記述された行の余白をクリックして、EMP_LISTプロシージャにブレーク・ポイントを設定します。 行番号の代わりに赤い丸印が表示されます。 これがブレーク・ポイント記号です。

次に、「Debug」アイコンをクリックします。

 

.

Debug PL/SQLダイアログでPMAXROWS = 5;のままになっていることを確認し、「OK」をクリックします。

 

.

Log」タブをクリックします(あらかじめ表示されている場合を除く)。

 

.

ブレーク・ポイントを設定した場所で、デバッガが処理を停止します。 ここで、実行フローの制御や、変数値の変更、またはその他のデバッグ機能を実行できます。 Step Into 」アイコンをクリックします。

注: デバッグ中に以下のエラーが発生することを回避するため、前提条件の項で、DEBUG CONNECT SESSIONDEBUG ANY PROCEDUREのユーザー権限が付与されています。

 

.

カーソルのある最初の行が表示されます。 再度、Step Into」アイコンをクリックします。

 

.

これで、カーソルのある最初の行が選択されています。 さらに3回、Step Into」アイコンをクリックします。

 

.

Data」タブを選択します。

 

.

Dataウィンドウに、これから実行するコード行と前に実行されたコード行で使用されている変数のリストが表示されます。

 

.

DBMS_OUTPUT.PUT_LINE(emp_tab(j).last_name);という行を右クリックし、「Run to Cursor」を選択します。

 

.

EMP_TAB」→「_ values」→「[1]」→「_value」の順に展開します。 表に含まれる特定の行に対して、フィールドの値が表示されます。 「LAST_NAME」フィールドを選択します。

 

.

LAST_NAME」フィールドを右クリックし、「Modify Value」を選択します。

 

.

名前を別の値(例:James)に変更して、「OK」をクリックします。

 

.

Debugging - Log」タブを選択します。

ここでは、実行時に変数の値を変更する処理を行いました。 これは、コードをデバッグする際には非常に便利な処理です。

 

.

Resume「」をクリックして、PL/SQLを最後まで実行します。

 

.

変更した値がLogウィンドウに表示されていることを確認します。

 

まとめ

このチュートリアルで学習した内容は、以下のとおりです。

Hardware and Software Engineered to Work Together 会社情報 |オラクルとサン | Oracle RSS Feeds | 採用情報 | お問い合わせ | サイトマップ | 情報保護基本方針 | ウェブサイトのご使用条件 | 個人情報保護基本方針