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では、サードパーティ製のドライバを使ってデータソースにアクセスするプロセスが大幅に簡素化されています。簡単に再利用できるよう、ドライバを登録できるようになりました。
サードパーティ製ドライバの登録
これで、新しい接続のために再利用可能なドライバと、そのためのライブラリが登録できました。登録されたドライバは(「ツール」->「設定」の「データベース接続」で)一元的に管理されます。
なお、タイプ IV(thin)ドライバの場合はこの手順がすべてですが、同様の方法でタイプ II ドライバを登録する場合には、追加の手順が必要です。タイプ II ドライバの場合には、.dllファイルなどのネイティブなライブラリの動的ローディングを実現するために、タイプ II ドライバをシステム・パスに置くか、jdev.confファイル内で指定する必要があります。
Oracle9i JDeveloperは、SQL文の実行およびチューニング用にSQLワークシートを提供しています。選択したSQL文の実行または実行計画(explain plan)の取得を即座に実施できます。以前に実行されたSQL文は、 「履歴」ボタンを使って再呼出しできます。
このSQLワークシートを利用すると、データベース内のオブジェクトの作成用のSQL文も実行できます。つまり、データ取得用のSQL文のテスト目的だけではなく、開発用途にも使用できます。

図4: SQLワークシート内のSQL文の実行計画の表示
ナビゲータ内でPL/SQLオブジェクトを右クリックして"<PL/SQLオブジェクト名>の実行"を選ぶことにより、PL/SQLプロシージャ、ファンクションおよびパッケージを実行できます。選択されたオブジェクトの引数についての詳細および戻り値(ファンクションの場合)が記載されたダイアログ・ボックスが提示されます。選択されたオブジェクトがパッケージの場合、ダイアログ・ボックスにはパッケージ仕様に定義されているプロシージャおよびファンクションの一覧が表示されます。これらのプロシージャまたはファンクションの1つを実行の対象として選択できます。
「PL/SQLの実行」ダイアログ・ボックスを起動すると、ターゲットのPL/SQLプログラム単位をコールするコードが自動的に生成されます。ダイアログ・ボックス内で直接このコードを修正し、パラメータを初期化して渡すことができます。
DBMS_OUTPUTをコールするPL/SQLプログラムを実行すると、その結果はログ・ウィンドウに表示されます。同様に、ファンクションからの戻り値およびOUTパラメータの値もログ・ウィンドウに表示されます。

図5: パッケージ内のファンクションの実行
JDeveloperは、ブックマーク、マクロ、コード・テンプレート、検索/置換などの一般的なエディタ機能に加え、カスタマイズ可能なPL/SQL構文選択機能も持つPL/SQLプログラム向けのフル装備エディタを備えています。PL/SQLコード・インサイトもエディタから使用できます。 たとえば、DBMS_OUTPUT.に続けて [Ctrl]+[スペース] を入力すると、そのパッケージのメンバー一覧から選択できます。同様に、SQL文を入力する場合、EMP.に続けて [Ctrl]+[スペース] を入力すると、その表内の列の一覧を呼び出すことができます。なおデフォルトにより、ピリオド(".")を入力した後、しばらく時間をおくことでも ( [Ctrl]+[スペース] を押すことなく)コード・インサイトを起動できます。
コード・エディタを使用して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プロシージャ |
プログラム単位内に定義されているプロシージャまたはファンクションの引数、埋込みプロシージャとファンクションおよび変数を示します。なお、構造ウィンドウ内の要素をダブルクリックすると、ソース・コードの該当する場所へナビゲートできます。
|
JDeveloper 9.0.3 |
|
PL/SQLパッケージ |
選択されたプログラム単位内に定義されているプロシージャ、ファンクションおよび変数を示します。プロシージャおよびファンクションの引数も表示されます。なお、構造ウィンドウ内の要素をダブルクリックすると、ソース・コードの該当する場所へナビゲートできます。
|
JDeveloper 9.0.3 |
|
Javaストアド・プロシージャ |
クラスのパッケージ名、インポート、メソッド、メンバーなど、Javaクラスの詳細を示します。なお、構造ウィンドウ内の要素をダブルクリックすると、ソース・コードの該当する場所へナビゲートできます。 |
JDeveloper 9.0.3 |

図7: 構造ウィンドウに表示されたパッケージに関する情報
Oracle9i JDeveloper 9.0.2では、 PL/SQLデバッグはプレビュー機能として含まれていましたが正式な機能ではありませんでした。このため、マニュアルに記載されておらず、サポートもされていません。Oracle9i JDeveloper 9.0.3は、Oracle8i、Oracle9i Release 1およびOracle9i Release 2データベースでのPL/SQLデバッグを完全にサポートします。
JDeveloper 9.0.3には、PL/SQL用のフル機能デバッガが含まれています。PL/SQLデバッグ機能の重要な部分は次のとおりです。
PL/SQLデバッグ情報は、JDeveloperのいくつかのウィンドウから入手できます。次のリストに、デバッグ中に入手できる情報の例を示します。

図8: コード・エディタでのデバッグ情報の表示

図9: スタック・ウィンドウ
PROC_AによってPROC_Bがコールされ、
PROC_BによってFUNC_Cがコールされたことを示している
なお、スタック・ウィンドウを使って、デバッガの表示情報を変更できます。つまり、前述の例で、スタック・ウィンドウ内のPROC_Bをダブルクリックすると、デバッガ・ウィンドウ(およびコード・エディタ)の情報が更新され、PROC_Bに関するデータが表示されます。
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プロシージャ、ファンクション、パッケージ、またはトリガーが確実にデバッグ情報と同時にコンパイルされるようにするには、次の3つの方法があります。
ALTER SESSION SET PLSQL_DEBUG = TRUE
そのセッションで作成または再コンパイルされたすべてのPL/SQLプログラムは、その時点からデバッグ情報を含むようになります。
ALTER <PROCEDURE | FUNCTION | PACKAGE | TRIGGER> <プログラム名> COMPILE DEBUG
Javaストアド・プロシージャの場合、データベースにロードする前に、デバッグ情報を含めてJavaクラスをコンパイルしてください。JDeveloperから、 「プロジェクト」->「プロジェクトの設定」、コンパイラ ページの順に表示し、「デバッグ情報を含める」チェックボックスにマークが付いていることを確認してください。Javaクラスをデータベースに配布する場合、サーバーに対しクラスの再コンパイルを命令する-resolveオプションは使用しないでください。
Oracle8i とOracle9i Release 1の場合:
CREATE ANY PROCEDURE
Oracle9i Release 2の場合:
DEBUG ANY PROCEDURE
DEBUG CONNECT SESSION

図10: JDeveloperでの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をリモートからデバッグする手順は次のとおりです(ローカル・デバッグ同様、ブレークポイントは設定済であることが前提です)。
注:PL/SQLをリモートからデバッグする場合、リモート・デバッグを有効にするためにはワークスペースおよびプロジェクトが必要です。ワークスペースおよびプロジェクトがない場合は、作成する必要があります。
DBMS_DEBUG_JDWP.CONNECT_TCP ('hostname_or_ip', port_number)
ここで、hostname_or_ipは、JDeveloperを稼動しているマシンのホスト名またはIPアドレス、 port_numberは、デバッガ・リスナーの起動時に入力したポート番号です。
EXEC my_procedure;

図11: PL/SQLのリモート・デバッグの概観
JDeveloperでは、今後のリリースで、データベース開発およびPL/SQL開発に関するサポートの更なる拡大に取り組んでいます。社内外問わず、多くの顧客と密接かつ活発に協力し、この分野に対する取り組み項目の特定と優先順位付けを行っています。現在予定されている拡張機能は次のとおりです。
Oracle JDeveloperの詳細は、 http://otn.oracle.co.jp/products/jdev/
のOTNサイトで参照してください。オンラインのデモ、技術情報およびホワイト・ペーパー、HowToドキュメントとサンプル、技術的な質問やフィードバックを提供できるJDeveloperディスカッション・フォーラムなどがあります。
このサイトでは、無償でトライアル版を公開中です。