SQL Developer 3.1を使用したプロシージャのテストおよびデバッグ

概要

    目的

    このチュートリアルではDDLスクリプトを実行してデータベース・オブジェクトへの変更を確認する方法と、プロシージャを作成、実行、テスト、デバッグする方法について説明します。

    所要時間

    約60分

    はじめに

    Oracle SQL Developerは完全にサポートされた無償のグラフィカル・ツールであり、生産性の向上およびデータベース開発作業の簡素化を目的としています。 SQL Developerを使用すると、データベース・オブジェクトを参照、編集、作成できます。また、SQL文の実行、PL/SQL文の編集とデバッグ、PL/SQLユニット・テストの作成、レポートの実行、およびバージョン管理のもとでファイルを配置できるようになります。

    このチュートリアルでは、SQL Developer Release 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ファイルをダウンロードし、作業ディレクトリに解凍していること

データベース接続の作成

    このトピックでは、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の作成
    • プロシージャの作成と実行
    • ユニット・テスト・リポジトリの作成
    • ユニット・テストの作成と実行

    参考資料

このOracle by Exampleをナビゲートする際、次の機能を使用できます。

ヘッダー・ボタンの非表示:
ヘッダー内のボタンを非表示にするには、タイトルをクリックします。 ボタンを再表示するには、もう一度タイトルをクリックします。
トピック一覧ボタン:
すべてのトピックの一覧です。 いずれかのトピックをクリックすると、その項に移動します。
すべてのトピックを開く/閉じる:
すべての項に対する詳細を表示または非表示にします。 デフォルトでは、すべてのトピックが閉じられています。
すべてのイメージを表示/非表示:
すべてのスクリーンショットを表示または非表示にします。 デフォルトでは、すべてのイメージが表示されています。
印刷:
コンテンツを印刷します。 現在表示または非表示にされているコンテンツが印刷されます。

このチュートリアルの特定の項に移動するには、一覧からトピックを選択してください。