SQL Developer 3.1を使用したプロシージャのテストおよびデバッグ
概要
- Oracle SQL Developer Release 3.1をインストールしていること
- サンプル・スキーマがインストールされているOracle Database 11gデータベースにアクセスできること
- HRユーザーにDEBUG CONNECT SESSION権限とDEBUG ANY PROCEDURE権限を付与していること
- 『Oracle SQL Developer Data Modeler 3.1を使用したデータベースのリエンジニアリング』チュートリアルを完了していること
- files.zipファイルをダウンロードし、作業ディレクトリに解凍していること
目的
このチュートリアルではDDLスクリプトを実行してデータベース・オブジェクトへの変更を確認する方法と、プロシージャを作成、実行、テスト、デバッグする方法について説明します。
所要時間
約60分
はじめに
Oracle SQL Developerは完全にサポートされた無償のグラフィカル・ツールであり、生産性の向上およびデータベース開発作業の簡素化を目的としています。 SQL Developerを使用すると、データベース・オブジェクトを参照、編集、作成できます。また、SQL文の実行、PL/SQL文の編集とデバッグ、PL/SQLユニット・テストの作成、レポートの実行、およびバージョン管理のもとでファイルを配置できるようになります。
このチュートリアルでは、SQL Developer Release 3.1を使用してさまざまなタスクを調査します。
前提条件
このチュートリアルを始める前に以下のことを確認してください。
データベース接続の作成
このトピックでは、SQL DeveloperでHRスキーマへの接続を作成します。
デスクトップにあるSQL Developer 3.1アイコンをダブルクリックします。
初めてSQL Developerを開くと、Tip of the Dayダイアログが表示される場合があります。 「Show tips at startup」チェック・ボックスの選択を解除すると、今後は表示されなくなります。ダイアログ右上の「Close」アイコンをクリックします。

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

New / Select Database Connectionダイアログが表示されます。 次のとおりに接続情報を入力し、「Test」をクリックします。
Connection Name: hr_orcl
User Name: hr
Password: oracle(「Save Password」チェック・ボックスを選択)
SID: orcl(または独自のSID)

テスト・ステータスとして'Success'が表示されたら、 New/Select Database Connectionダイアログの「Connect」をクリックして接続を作成します。

「hr_orcl」接続を展開し、 すべてのオブジェクト・タイプを確認します。 「Tables」を展開します。 次の項では、hrスキーマに現在含まれているオブジェクトを確認します。

HRスキーマ内の既存のオブジェクトの確認
このトピックでは、hrスキーマ内の既存のオブジェクトを確認します。
「EMPLOYEES」表を展開します。 列の定義が一覧表示されています。
Oracle SQL Developer Data Modelerで前のチュートリアルを実行済みの場合、リレーショナル・モデルのDEPARTMENTS表に追加したCOST_CENTER列が現時点では存在していないことに注意してください。 今のところ、PROJECTS表とTASKS表もスキーマに含まれていません。 hrスキーマを変更するためのスクリプトは次のトピックで実行します。

ナビゲータで「DEPARTMENTS」表をクリックします。

EMPLOYEESタブの情報がDEPARTMENTS表の情報に置き換わりました。 タブ内の表情報をそのまま維持するには、「Pin」アイコンを選択してペインを固定します。

再度、ナビゲータで「EMPLOYEES」表をクリックします。

DEPARTMENTS表のペインが固定されているため、今回はそれぞれの表に対して1つずつ、合計2つのタブがあります。

EMPLOYEES表のデータを確認します。 「Data」サブタブをクリックします。

EMPLOYEES表に含まれるデータが表示されます。 SQL WorksheetにSQL文を入力することもできます。 「hr_orcl」タブをクリックします。

次のSQL文を入力し、「Execute SQL Statement」アイコンを選択します。
select * from employees
where job_id like '%SA%'

問合せの結果が表示されます。 次のトピックでは、前のチュートリアルでData Modeler上で生成したスクリプトを実行します。

DDLスクリプトの実行
このトピックでは、Data Modelerのチュートリアルで生成したDDLスクリプトを実行します。 前のチュートリアルを完了していない場合、VMの/home/oracle/Desktop/solutions/dm_labディレクトリにあるソリューションを使用できます。
「File」→「Open」を選択します。

「Desktop」アイコンを選択して前のチュートリアルで作成したファイルを選択するか、または/home/oracle/Desktop/solutions/dm_labディレクトリへ移動して「dm_mods.sql」ファイルを選択し、「Open」をクリックします。

このSQLファイルにはHRスキーマを変更するすべてのDDLが含まれているため、前のチュートリアルで実施したモデル変更をスキーマに対して同期できます。 このスクリプトを実行すると、PROJECTS表とTASKS表が作成され、DEPARTMENTS表に新しいCOST_CENTER列が追加されます。 下方向にスクロールして、DDLを確認します。

確認が終わったら、「Run Script」アイコンをクリックします。

リストから「hr_orcl」接続を選択し、「OK」をクリックします。

DDLスクリプトに含まれるすべての文が正常に実行されました。

「Refresh」アイコンをクリックして表のリストを更新します。

新しいPROJECTS表とTASKS表がリストに含まれていることを確認します。 DEPARTMENTS表、PROJECTS表、およびTASKS表の各ノードを展開して結果を確認します。 次のトピックでは、プロシージャを作成して実行します。

表APIの作成
このトピックでは、DEPARTMENTS表に対するAPIパッケージを作成します。 表APIを使用すると、INSERT、UPDATE、DELETE文を直接記述したり管理したりすることなく、レコードを挿入、更新、削除するためのPL/SQLコールをアプリケーション内で実行できます。
ナビゲータで「DEPARTMENTS」表を右クリックし、「Table」→「Generate Table API...」の順に選択します。

DEPARTMENTS表に対するAPIパッケージを作成するためのPL/SQLコードが表示されます。 コードを確認します。 挿入(ins)プロシージャ、削除プロシージャ、更新プロシージャが含まれています。 「Run Script」アイコンをクリックしてパッケージを作成します。

パッケージが正常にコンパイルされました。

プロシージャの作成、実行、デバッグ
このトピックでは、従業員が受け取る歩合を、売上高と各自の歩合比率に基づいて決定するプロシージャを作成し、実行し、デバッグします。
このプロシージャ用のスクリプトはあらかじめ作成されているため、ここではそのファイルを開きます。 「File」→「Open」を選択します。

/home/oracle/Desktop/solutions/sqldev_labディレクトリへ移動し、「proc.sql」ファイルを選択して「Open」をクリックします。

「Run Script」アイコンをクリックしてAWARD_BONUSプロシージャを作成します。

「hr_orcl」接続を選択し、「OK」をクリックします。

プロシージャが作成され、コンパイル時に警告が発生しています。 警告を表示するには、ナビゲータで「Procedures」を展開します。

プロシージャのリストから「AWARD_BONUS」を選択します。 警告アイコンは、プロシージャのコンパイルが正常に完了していないことを示しています。

「Compile」アイコンをクリックします。

エラーから、15行目に問題があることが分かります。 行番号を表示するには、 コードの前の空白部分を右クリックして「Toggle Line Numbers」を選択します。

エラーが発生した理由は、14行目のRAISE comm_missingコードの後に';'が欠如しているためです。';'を入力し、「Compile」アイコンを再度選択します。

今回はプロシージャが正常にコンパイルされました。 「Run」アイコンをクリックして、プロシージャを実行します。

Debug PL/SQLダイアログ・ウィンドウが表示されます。 EMP_IDとSALES_AMTの値は、現在NULLに設定されています。

EMP_IDの値をNULLから149に変更し、SALES_AMTの値を2000に変更し、「OK」をクリックします。

プロシージャが正常に実行され、給与の値が変更されました。 デバッグの動作を確認するため、ここでブレーク・ポイントを作成します。 行番号「8」をクリックします。

赤色のアイコンはブレーク・ポイントが作成されたことを示しており、プロシージャをデバッグ・モードで実行すると、8行目で実行が中断されます。「Debug」アイコンをクリックします。

前回と同じ入力値のまま、「OK」をクリックします。

デバッガが実行され、8行目で停止します。「Data」タブをクリックします。

各変数の現在の値が表示されます。 「Debugging」タブをクリックします。

「Step Over」アイコンをクリックしてプロシージャ内の次の文に移動します。

SELECT文が実行されました。 ここで、l_salaryとl_commissionの値をチェックします。 再度、「Data」タブをクリックします。

l_salaryとl_commissionの値がデータベース内の既存の値に変更されています。 「Debugging」タブをクリックします。

再度、「Step Over」アイコンをクリックして次の文に移動します。

デバッガがプロシージャ内の次の文に移動したことを確認します。 残りのプロシージャを実行するには、「Resume」アイコンをクリックします。

プロシージャの実行が完了しました。 給与の値を確認します。 次のトピックでは、ユニット・テストを作成して実行するためのテスト・リポジトリを作成します。

ユニット・テスト・リポジトリの作成
このトピックでは、UNIT_TEST_REPOSという名前のデータベース・ユーザーを作成します。 このユーザーは、ユニット・テスト・リポジトリのデータを保持するために作成します。 次に、作成したユーザーのスキーマ内にリポジトリを作成します。
SYSユーザーに対して接続を作成します。 「Connections」を右クリックし、「New Connection」を選択します。

次の情報を入力し、「Connect」をクリックします。
Connection Name:sys_orcl
Username:sys
Password:oracle
「Save Password」チェック・ボックスを選択
Role:SYSDBA
SID:orcl

接続が正常に作成されました。 「hr_orcl」接続を縮小します。 「sys_orcl」接続を展開し、「Other Users」を右クリックして「Create User」を選択します。

次の情報を入力し、「Roles」タブをクリックします。
Username:unit_test_repos
Password:oracle
Default Tablespace:USERS
Temporary Tablespace:TEMP

「Connect」ロールと「Resource」ロールを選択し、「Apply」をクリックします。

unit_test_reposユーザーが作成されました。 「Close」をクリックします。

次に、unit_test_reposユーザーに対する接続を作成する必要があります。 このユーザーは、ユニット・テスト・リポジトリのデータを保持します。 「Connections」を右クリックし、「New Connection」を選択します。

次の情報を入力し、「Connect」をクリックします。
Connection Name:unit_test_repos_orcl
Username:unit_test_repos
Password:oracle
「Save Password」チェック・ボックスを選択
SID:orcl

unit_test_reposユーザーとunit_test_repos_orcl接続が作成されました。

「Tools」→「Unit Test」→「Repository」を選択し、「Select Current Repository」を選択します。

「unit_test_repos_orcl」接続を選択し、「OK」をクリックします。

ここでは新規のリポジトリを作成するため、 「Yes」をクリックします。

この接続には、リポジトリの作成に必要な権限が付与されていません。 「OK」をクリックし、適用される権限を表示します。

sysのパスワードとしてoracleと入力し、「OK」をクリックします。

grant文が表示されます。 「Yes」をクリックします。

UNIT_TEST_REPOSユーザーには、所定のいくつかの表に対するselectアクセスが必要です。 「OK」をクリックします。

grant文が表示されます。 「Yes」をクリックします。

UNIT_TEST_REPOSユーザーには、現在、リポジトリ所有者の管理権限が付与されていません。 「OK」をクリックし、実行されるgrant文を表示します。

grant文が表示されます。 「Yes」をクリックします。

リポジトリが作成される間、進捗ウィンドウが表示されます。

リポジトリが作成されました。 「OK」をクリックします。

ユニット・テストの作成と実行
ここまででユニット・テスト・リポジトリの作成は完了したため、このチュートリアルの前半で作成したPL/SQLプロシージャに対するユニット・テストを作成します。 次に、このユニット・テストを実行してさまざまな値が有効であることを確認します。
「View」→「Unit Test」を選択します。

Unit Testナビゲータで、「Tests」を右クリックして「Create Test」を選択します。

Select Operationウィンドウで、AWARD_BONUSプロシージャの作成に使用した「hr_orcl」接続を選択します。

「Procedures」を展開して「AWARD_BONUS」を選択し、「Next」をクリックします。

Specify Test Nameウィンドウで、Test NameにAWARD_BONUSが指定されており、Create with single Dummy implementationが選択されていることを確認したら、「Next」をクリックします。

Specify Startupウィンドウで「+」アイコンをクリックし、ドロップダウン・リスト・ボックスから「Table or Row Copy」を選択します。

Source TableにEMPLOYEESと入力し、「OK」をクリックします。 テストの影響を受ける表が一時表に保存され、表に対する問合せが自動的に生成されます。

「Next」をクリックします。

Specify ParametersウィンドウでEMP_IDのInput文字列を149に変更し、SALES_AMTを2000に変更し、「Next」をクリックします。

検証を追加するには、「+」アイコンを選択してドロップダウン・リストから「Query returning row(s)」を選択します。

次の問合せを指定し、「OK」をクリックします。 この問合せは、ユニット・テストによって実施された変更の結果をテストします。
SELECT * FROM employees WHERE employee_id = 149
AND salary = 11700;

「Next」をクリックします。

Specify Teardownウィンドウで「+」アイコンをクリックし、ドロップダウン・リスト・ボックスから「Table or Row Restore」を選択します。

Row IdentifierはPrimary Keyのままにして、「OK」をクリックします。

「Next」をクリックします。

「Finish」をクリックします。

「Tests」を展開します。 作成したテストがリストに表示されます。

左側のナビゲータで「AWARD_BONUS」テストを選択します。 右側のパネルにテストの詳細情報が表示されます。

「Debug Implementation」アイコンをクリックしてテストを実行します。

進捗ウィンドウが表示されます。

テストが完了すると、結果が表示されます。 「Close」をクリックします。

まとめ
- データベース接続の作成
- HRスキーマ内の既存のオブジェクトの確認
- DDLスクリプトの実行
- 表APIの作成
- プロシージャの作成と実行
- ユニット・テスト・リポジトリの作成
- ユニット・テストの作成と実行
- OTN上のOracle SQL Developerホームページ
- Introduction to SQL コース
- Oracle Learning Library
- Oracle University
このチュートリアルで学習した内容は、以下のとおりです。
参考資料
このOracle by Exampleをナビゲートする際、次の機能を使用できます。
- ヘッダー・ボタンの非表示:
- ヘッダー内のボタンを非表示にするには、タイトルをクリックします。 ボタンを再表示するには、もう一度タイトルをクリックします。
- トピック一覧ボタン:
- すべてのトピックの一覧です。 いずれかのトピックをクリックすると、その項に移動します。
- すべてのトピックを開く/閉じる:
- すべての項に対する詳細を表示または非表示にします。 デフォルトでは、すべてのトピックが閉じられています。
- すべてのイメージを表示/非表示:
- すべてのスクリーンショットを表示または非表示にします。 デフォルトでは、すべてのイメージが表示されています。
- 印刷:
- コンテンツを印刷します。 現在表示または非表示にされているコンテンツが印刷されます。
このチュートリアルの特定の項に移動するには、一覧からトピックを選択してください。