Java でのユーザー定義関数

Java でのユーザー定義関数の実装は、ユーザー定義関数の登録時のパラメーター・スタイルによって 2通りの書き方があります。

PARAMETER STYLE JAVA

まず、パラメーター・スタイル Java の方の書き方から見ていきましょう。
以下の規則を守っている必要があります。

比較的普通の Java のクラスになります。
例えば、以下のような簡単な Java のクラスをユーザー定義関数として使用してみましょう。簡単な足し算です。

public class UDFTestJava {

public static int add (int a, int b) {
int c = a + b;
return c;
}

}

コンパイルして、/QIBM/UserData/OS400/SQLLib/Function ディレクトリにコピーします。

オペレーション・ナビゲーターから、以下のようなメニューをたどって「外部」「関数」(=Function)の「新規作成」を行ないます。

こんな画面になります。(ストアド・プロシージャの時と似ていますので、参照してみてください)

関数名( = FUNCTION名)を指定し、戻り値のタイプを指定します。

ユーザー定義関数が受け取る引数を指定します。パラメーター・スタイルは「Java」です。

Java のクラス名に ! をつけてメソッドを指定します。

「OK」を押してしばらくするとユーザー定義関数が作成されます。

「データベース」の右側のペインにも作成されると出てくるようになります。


結果の確認

確認のためにテーブル UDFTEST を作成してみましょう。フィールドは関数の結果を確認するための、データタイプ INT のフィールドのみのテーブルです。

先に登録した add 関数を使って値を挿入してみます。

ちゃんと結果が入っていますね。

ついでに、ユーザー定義関数を調べた時に例として挙げた関数も試してみましょう。

ちゃんと指定したようにデータが入っています。


PARAMETER STYLE DB2GENERAL

今度はパラメーター・スタイル DB2GENERAL の方を見ていきましょう。

こちらは以下のような規則を守る必要があります。

こちらがコーディング例です。

まず、com.ibm.db2.app.UDF クラスを拡張します。
メソッドは戻りを void にして、引数として戻り値も含めた引数を取ります。この場合は a と b が受け取りの引数で c が戻り用の変数です。
その戻り値のセットは set() メソッドで行い、最初の数字は引数の中での順番です。ここでは受け取った 3番目の値に c の計算結果をセットする、ということです。

import com.ibm.db2.app.*;

public class UDFTestDB2General extends UDF {

public void add (int a, int b, int c) throws Exception {
c = a + b;
set(3, c);
}

}

コンパイルには db2routines_classes.jar がクラスパスに入っている必要があり、その jar ファイルは /QIBM/ProdData/OS400/Java400/ext にありますので、コピーなどしてクラスパスが通る/通った状態にしておいてください。

javac でコンパイルします。

できたクラスファイルを /QIBM/UserData/OS400/SQLLib/Function にコピーします。

パラメーター・スタイル DB2GENERAL にはオペレーション・ナビゲーターからの登録がサポートされていません。
対話型SQL の画面から CREATE FUNCTION ステートメントを使って登録します。(プロンプトのサポートもありません)

細かいオプションには触れませんが、登録の例です。

パラメーター・スタイル JAVA の時と同じように検証してみましょう。

最後に正しい結果が追加されていますね。


ここまでふれてきた、パラメータースタイルの違いや、また Java で UDF クラスを拡張して処理する場合の呼び出しイベントにはどういうものがあるかなどは UDB for iSeries のマニュアルを参照してください。

UDF の SQLでの呼び出し方にはいくつかの決まり/制限があります。(例えば直接パラメーター・マーカーを引き数にとれない、など)
こちらも UDF for iSeries のマニュアルにまとまった記述があるので、そちらを参照してください。

Java で UDF を実装する場合の考慮点も記述があります。そちらも参照ください。

[Top Pageに戻る]

Ads by TOK2