Java ルーチンと他のルーチンとの相違点
Java ルーチンは、他のプログラム言語で記述されたルーチンとは、いくつかの基本的な点で異なります。
Javaルーチンは、他の言語で書かれたストアドプロシージャとは以下の点で異なります
- Javaルーチンは、PARAMETER STYLE JAVAで定義する必要があります。 JAVAのパラメータスタイルは、ルーチンがJava言語およびSQLJ仕様に準拠したパラメータ渡し規約を使用することを指定します。 DB2 は、INOUT および OUT パラメーターを単一記入項目配列として受け渡します。 つまり、Javaルーチンでは、OUTまたはINOUTパラメータを配列として宣言する必要があります。 例えば、ストアード・プロシージャー sp_one_out にタイプ int の出力パラメーターが 1 つある
ものとします。 そのパラメーターの宣言は、次のようになります。
public static void routine_one_out (int[] out_parm) - JavaのメインメソッドであるJavaルーチンには、以下の制限があります
- このメソッドは、String[]のシグネチャを持つ必要があります。すべてのパラメータを、 java.lang.String 型のJava変数にマッピングできる必要があります。
- ルーチンは IN パラメーターを 1 つだけ持つことができます。
- Javaルーチンでは、計装施設インターフェース(IFI)コールを行うことはできません。
- Javaルーチンに対して、SQLアクセスレベルをNO SQLに指定することはできません。
- 他のJavaプログラムと同様に、Javaルーチンには以下のステートメントを含めることはできません
- CONNECT
- RELEASE
- SET CONNECTION
- ホスト言語データ・タイプへのルーチン・パラメーターのマッピングは、他の言語のホスト言語パラメーターへのルーチン・パラメーターのマッピングと異なります。
- Javaストアドプロシージャから結果セットを返すためのテクニックは、他のストアドプロシージャから結果セットを返すためのテクニックとは異なります。
- Javaルーチンが実行される際、実行中のクラスで新しいクラス参照が発生すると、Javaは動的にクラスをロードします。 クラスのロード処理時には、
java.lang.ClassNotFoundExceptionまたはjava.lang.NoClassDefFoundErrorがスローされる場合があります。 これらのエラーは、Javaがインストール済みのJARファイルまたはCLASSPATHからクラスを検索する場合に発生します。 Javaルーチンがこれらのエラーや例外をキャッチできない場合、ルーチンは終了し、SQLエラー状態が報告されます。