Oracle9i JDeveloperでの
データベースおよびPL/SQLの開発とデバッグ

概要

Oracle9i JDeveloperは、J2EEアプリケーション、WebサービスおよびPL/SQLの構築、テストおよびデプロイをEnd-to-Endにサポートする総合開発環境(IDE)です。Oracle9i JDeveloperは、それ自体がJavaで開発されており、マルチ・プラットフォームで利用可能です。 現在、JDeveloperは、Windows、Linux、Solaris上でサポートされています。

本書では、 Oracle9i JDeveloper 9.0.3に含まれている、PL/SQLの開発と一般的なデータベース開発向けの機能について説明します。JDeveloperのアプリケーション構築向けのより高度なデータベース・アクセス機能(たとえば、Business Components for Java、JPublisher、SQLJ、PL/SQL Webサービスの公開など)は本書では触れていません。


データベースの開発

接続情報の管理

Oracle9i JDeveloperでは、簡単なウィザード・インタフェースを使って、データベース接続を作成できます。これらの接続は、データベース情報の参照、データベース・スキーマ・オブジェクトの作成、非定型SQL文の実行とチューニング、JSPやJavaアプリケーションのウィザードでのデータベース接続の識別、サーバーサイド・コードのデプロイなどのために利用できます。

接続ウィザード

図1: 接続ウィザード

データベース情報の参照

ウィザードで作成されたデータベース接続を使用し、ユーザーはデータベース内のオブジェクトを参照できます。この参照用のツール「データベース・ブラウザ」はJDBCで実装されているため、JDBCドライバがサポートされている任意のデータベースを参照できます。ただし、Oracleデータベース情報の参照の場合は、その他のデータベース以上に広範なデータベース・オブジェクトにもアクセスできます。

データベース参照機能の主要な特長の1つは、 表ビューアです。表ビューアは、列についての詳細情報や表の制約を一目で見ることができ、さらなる開発・検証のために表からデータをすばやく検索できます。これは、最初の100行のみがフェッチされる(デフォルト)設定になっており、大量データの表に対してもストレスなくデータ参照が可能です。もちろん、それ以降の行は、必要に応じて手動でフェッチできるという、スケーラブルな方法が採用されています。

表ビューア

図2: 表ビューアによるデータベースの参照

スキーマ・オブジェクトの作成

JDeveloperは、SQLワークシート内のSQL文を実行して、任意のスキーマ・オブジェクトの作成をサポートします。また、いくつかのスキーマ・オブジェクトには作成用の支援ツールが用意されています。JDeveloper 9.0.2では、データベース・ユーザーおよびPL/SQLプログラム(プロシージャ、ファンクション、パッケージ)を作成するための支援ツールを提供しています。JDeveloper 9.0.3では、さらに、表、ビューおよびトリガーを含むスキーマ・オブジェクト作成用に支援ツール・セットを拡張しています。

オブジェクト

説明

リリース

ユーザー

新規ユーザーを作成します。ユーザー名、パスワード、デフォルトの表領域、一時表領域など、ユーザーの詳細を指定できます。

JDeveloper 9.0.2

PL/SQLのプロシージャ

新規プロシージャを作成します。プロシージャは、コード・エディタで編集できます。

JDeveloper 9.0.2

PL/SQLのファンクション

新規ファンクションを作成します。ファンクションは、コード・エディタで編集できます。

JDeveloper 9.0.2

PL/SQLのパッケージと
パッケージ本体

新規パッケージまたはパッケージ本体を作成します。パッケージとパッケージ本体は、コード・エディタで編集できます。

JDeveloper 9.0.2

新規の表を作成します。列、制約およびストレージ・パラメータを指定できます。

JDeveloper 9.0.3
の新機能

ビュー

新規ビューを作成します。ビュー、別名句およびその他のビュー・オプション用にSQL文を指定できます。

JDeveloper 9.0.3
の新機能

トリガー

新規トリガーを作成します。トリガーは、コード・エディタで編集できます。

JDeveloper 9.0.3
の新機能

表作成ウィザード

図3: 表作成ウィザードでの制約の作成

サードパーティ製ドライバの登録

Oracle9i JDeveloper 9.0.3では、サードパーティ製のドライバを使ってデータソースにアクセスするプロセスが大幅に簡素化されています。簡単に再利用できるよう、ドライバを登録できるようになりました。

サードパーティ製ドライバの登録

  1. 新規データベース接続を作成するために接続ウィザードを起動します。
  2. ウィザードのステップ1で、接続タイプとして 「Third Party JDBC Driver」 を選びます。
  3. ウィザードのステップ3で、「新規」をクリックして新規ドライバを登録します。
  4. 同じウィザードのステップ3で、この接続で使用するURL文を入力します。

これで、新しい接続のために再利用可能なドライバと、そのためのライブラリが登録できました。登録されたドライバは(「ツール」->「設定」「データベース接続」で)一元的に管理されます。

なお、タイプ IV(thin)ドライバの場合はこの手順がすべてですが、同様の方法でタイプ II ドライバを登録する場合には、追加の手順が必要です。タイプ II ドライバの場合には、.dllファイルなどのネイティブなライブラリの動的ローディングを実現するために、タイプ II ドライバをシステム・パスに置くか、jdev.confファイル内で指定する必要があります。

SQLワークシート内でのSQL文の実行

Oracle9i JDeveloperは、SQL文の実行およびチューニング用にSQLワークシートを提供しています。選択したSQL文の実行または実行計画(explain plan)の取得を即座に実施できます。以前に実行されたSQL文は、 「履歴」ボタンを使って再呼出しできます。

このSQLワークシートを利用すると、データベース内のオブジェクトの作成用のSQL文も実行できます。つまり、データ取得用のSQL文のテスト目的だけではなく、開発用途にも使用できます。

SQLワークシート

図4: SQLワークシート内のSQL文の実行計画の表示

PL/SQLの開発

PL/SQLプロシージャ、ファンクション、パッケージの実行

ナビゲータ内でPL/SQLオブジェクトを右クリックして"<PL/SQLオブジェクト名>の実行"を選ぶことにより、PL/SQLプロシージャ、ファンクションおよびパッケージを実行できます。選択されたオブジェクトの引数についての詳細および戻り値(ファンクションの場合)が記載されたダイアログ・ボックスが提示されます。選択されたオブジェクトがパッケージの場合、ダイアログ・ボックスにはパッケージ仕様に定義されているプロシージャおよびファンクションの一覧が表示されます。これらのプロシージャまたはファンクションの1つを実行の対象として選択できます。

「PL/SQLの実行」ダイアログ・ボックスを起動すると、ターゲットのPL/SQLプログラム単位をコールするコードが自動的に生成されます。ダイアログ・ボックス内で直接このコードを修正し、パラメータを初期化して渡すことができます。

DBMS_OUTPUTをコールするPL/SQLプログラムを実行すると、その結果はログ・ウィンドウに表示されます。同様に、ファンクションからの戻り値およびOUTパラメータの値もログ・ウィンドウに表示されます。

PL/SQLの実行

図5: パッケージ内のファンクションの実行

コード・エディタによるPL/SQLの編集

JDeveloperは、ブックマーク、マクロ、コード・テンプレート、検索/置換などの一般的なエディタ機能に加え、カスタマイズ可能なPL/SQL構文選択機能も持つPL/SQLプログラム向けのフル装備エディタを備えています。PL/SQLコード・インサイトもエディタから使用できます。 たとえば、DBMS_OUTPUT.に続けて [Ctrl]+[スペース] を入力すると、そのパッケージのメンバー一覧から選択できます。同様に、SQL文を入力する場合、EMP.に続けて [Ctrl]+[スペース] を入力すると、その表内の列の一覧を呼び出すことができます。なおデフォルトにより、ピリオド(".")を入力した後、しばらく時間をおくことでも ( [Ctrl]+[スペース] を押すことなく)コード・インサイトを起動できます。

コード・エディタを使用してPL/SQLコードを編集した後、ソース・コードをデータベースに送信して再コンパイルおよびプログラムの保存を行うためには、メイク、再ビルド、または保存を選択できます(いずれの動作もPL/SQLに関しては同じ結果になります)。コンパイル中に検出された構文エラーは、ログ・ウィンドウに表示されます。ログ・ウィンドウ内のエラー・メッセージをダブルクリックすることにより、構文エラーの箇所までソースをナビゲートできます。

PL/SQLの編集

図6: コード・エディタ内でのPL/SQLの編集

ナビゲータおよび構造ウィンドウでの情報

JDeveloper内のナビゲータおよび構造ウィンドウでは、PL/SQL開発者に役立つ追加情報が表示されます。たとえば、ナビゲータでは、無効なファンクションがある場合、それを表すために赤の"x"マークつきのPL/SQLオブジェクト・アイコン(例:無効を示すアイコン.)が示されます。なお、JDeveloper 9.0.3以降では、パッケージ本体やオブジェクト本体が、それぞれの仕様の下にリストされるようになっています。

構造ウィンドウでは、現在選択されているオブジェクトがデータベース・オブジェクトである場合、その詳細情報を表示します。次の表に、様々なオブジェクト・タイプに対して、構造ウィンドウが提供する追加の詳細情報を示します。

ナビゲータノード/
オブジェクト型

構造ウィンドウ上の詳細

リリース

接続ノード

選択された接続について、接続型、ドライバ名、ユーザーおよびURLを示します。

JDeveloper 9.0.3
の新機能

表、ビュー、または
表/ビューのシノニム

選択された表の列と索引を示します。

JDeveloper 9.0.2

PL/SQLプロシージャ
または ファンクション

プログラム単位内に定義されているプロシージャまたはファンクションの引数、埋込みプロシージャとファンクションおよび変数を示します。なお、構造ウィンドウ内の要素をダブルクリックすると、ソース・コードの該当する場所へナビゲートできます。
コード・エディタ上でPL/SQLプログラムを編集している間も、JDeveloperのPL/SQL解析機能が適宜ファイルの解析を試みます。解析機能が検出した構文エラーは、構造ウィンドウ上のエラーという名前のフォルダ内に表示されます。

JDeveloper 9.0.3
の新機能

PL/SQLパッケージ
または パッケージ本体

選択されたプログラム単位内に定義されているプロシージャ、ファンクションおよび変数を示します。プロシージャおよびファンクションの引数も表示されます。なお、構造ウィンドウ内の要素をダブルクリックすると、ソース・コードの該当する場所へナビゲートできます。
コード・エディタ上でPL/SQLプログラムを編集している間も、JDeveloperのPL/SQL解析機能が適宜ファイルの解析を試みます。解析機能が検出した構文エラーは、構造ウィンドウ上のエラーという名前のフォルダ内に表示されます。

JDeveloper 9.0.3
の新機能

Javaストアド・プロシージャ
(またはJavaクラス)

クラスのパッケージ名、インポート、メソッド、メンバーなど、Javaクラスの詳細を示します。なお、構造ウィンドウ内の要素をダブルクリックすると、ソース・コードの該当する場所へナビゲートできます。

JDeveloper 9.0.3
の新機能

構造ウィンドウ

図7: 構造ウィンドウに表示されたパッケージに関する情報

PL/SQLのデバッグ

Oracle9i JDeveloper 9.0.2では、 PL/SQLデバッグはプレビュー機能として含まれていましたが正式な機能ではありませんでした。このため、マニュアルに記載されておらず、サポートもされていません。Oracle9i JDeveloper 9.0.3は、Oracle8i、Oracle9i Release 1およびOracle9i Release 2データベースでのPL/SQLデバッグを完全にサポートします。

PL/SQLのデバッグ機能

JDeveloper 9.0.3には、PL/SQL用のフル機能デバッガが含まれています。PL/SQLデバッグ機能の重要な部分は次のとおりです。

PL/SQLデバッグ情報は、JDeveloperのいくつかのウィンドウから入手できます。次のリストに、デバッグ中に入手できる情報の例を示します。

Oracle9i Release 2用のその他のPL/SQLデバッグ機能

JDeveloper内のPL/SQLデバッグは、明確に異なる2つの方法で実装されています。Oracle9i Release 2(9.2)より前のデータベース・バージョンをデバッグする場合、JDeveloperは、サーバー提供の DBMS_DEBUG APIを使用します。Oracle9i Release 2からは、サーバー提供の新しいJDWP(Java Debugging Wire Protocol)実装をJDeveloperが使用します。JDeveloperは、ユーザーがデバッグに使用しているデータベース・バージョンを自動的に検出し、そのバージョンに適切な方法を適用します。

これらの2つのデバッグ実装には差異があるため、通常、それぞれのデータベース・バージョンに応じて適切にデバッグを行う必要があります。JDeveloperでは、Oracle9i Release 2内のJDWP実装にのみ提供されるいくつかの機能の利点が活用されます。

PL/SQLのデバッグに関するセットアップ要件

PL/SQLデバッグを有効にするには、いくつかの条件を満たす必要があります。

  1. ブレークポイントを設定し、トレース実行によってデバッグするコードは、デバッグ情報と同時にコンパイルする必要があります。

    PL/SQLプロシージャ、ファンクション、パッケージ、またはトリガーが確実にデバッグ情報と同時にコンパイルされるようにするには、次の3つの方法があります。

    Javaストアド・プロシージャの場合、データベースにロードする前に、デバッグ情報を含めてJavaクラスをコンパイルしてください。JDeveloperから、 「プロジェクト」->「プロジェクトの設定」コンパイラ ページの順に表示し、「デバッグ情報を含める」チェックボックスにマークが付いていることを確認してください。Javaクラスをデータベースに配布する場合、サーバーに対しクラスの再コンパイルを命令する-resolveオプションは使用しないでください。

  2. データベース・バージョンによっては、その他の前提条件を満たす必要があります。

    Oracle8i とOracle9i Release 1の場合:

    Oracle9i Release 2の場合:

    PL/SQLのデバッグ

    図10: JDeveloperでのPL/SQLパッケージのデバッグ

リモートからのPL/SQLデバッグ

通常、JDeveloperを使用してPL/SQLをデバッグする場合は、デバッガで停止させたい場所にブレークポイントを設定した後、ナビゲータ内でPL/SQLプロシージャ/ファンクション/パッケージを選択し、「デバッグ」ボタンをクリックします。これにより、JDeveloperは、自動的にデバッグ・セッションを開始した後そのセッションに接続し、ブレークポイントに達した際に停止します。このようなデバッグは、JDeveloper自身がデバッグを起動するクライアントであるという見方をすれば、ローカル・デバッグであるといえます。

JDeveloperとOracle9i Release 2を使用し、PL/SQLをリモートからデバッグすることもできます。PL/SQLをリモートからデバッグすることは、JDeveloper外のクライアント(たとえば、PL/SQL Webアプリケーション、OCIプログラム、SQL*Plusセッションなど)からデバッグ作業を開始することを意味します。この場合は、JDeveloperがかわりに実行していたいくつかの手順を手動で実行する必要があります。

PL/SQLをリモートからデバッグする手順は次のとおりです(ローカル・デバッグ同様、ブレークポイントは設定済であることが前提です)。

  1. JDeveloperデバッガ・リスナーを起動させます。このために、「プロジェクト」->「プロジェクトの設定」の順に選択して、「デバッガ-リモート」パネルで、「リモート・デバッグ」チェックボックスと 「JPDAのリスニング」ラジオボタンをチェックしてください。次に、「デバッグ」ボタンを押して、デバッガ・リスナーのポート番号を入力します。

    注:PL/SQLをリモートからデバッグする場合、リモート・デバッグを有効にするためにはワークスペースおよびプロジェクトが必要です。ワークスペースおよびプロジェクトがない場合は、作成する必要があります。

  2. 次のプロシージャ・コールを使用して、データベース・セッションからJDeveloperデバッガ・リスナーにアタッチします。

    DBMS_DEBUG_JDWP.CONNECT_TCP ('hostname_or_ip', port_number)

    ここで、hostname_or_ipは、JDeveloperを稼動しているマシンのホスト名またはIPアドレス、 port_numberは、デバッガ・リスナーの起動時に入力したポート番号です。

  3. 最後に、デバッガ・リスナーにアタッチしたものと同じデータベース・セッションから、ブレークポイントが入っているまたはブレークポイントに到達することを促すPL/SQLプログラムをコールします。たとえば、SQL*Plusからは次のように実行します。

    EXEC my_procedure;

リモート・デバッグ

図11: PL/SQLのリモート・デバッグの概観

今後予定されている機能

JDeveloperでは、今後のリリースで、データベース開発およびPL/SQL開発に関するサポートの更なる拡大に取り組んでいます。社内外問わず、多くの顧客と密接かつ活発に協力し、この分野に対する取り組み項目の特定と優先順位付けを行っています。現在予定されている拡張機能は次のとおりです。

詳細情報

Oracle JDeveloperの詳細は、 http://otn.oracle.co.jp/products/jdev/ のOTNサイトで参照してください。オンラインのデモ、技術情報およびホワイト・ペーパー、HowToドキュメントとサンプル、技術的な質問やフィードバックを提供できるJDeveloperディスカッション・フォーラムなどがあります。 このサイトでは、無償でトライアル版を公開中です。