ユーザー定義スカラー関数の作成および使用の例

表から入力を取得し、出力を表に書き込む、ユーザー定義スカラー関数を作成できます。

お客様の組織には、各従業員が受け取るボーナスを計算する ユーザー定義スカラー関数が必要であるとします。 給与、歩合、およびボーナスを含め、すべての従業員データは従業員表 EMP に入っています。 ボーナス計算関数の入力フィールドは、SALARY 列と COMM 列の値です。 関数の出力は、BONUS 列に入れます。 この関数はDb2表から入力を取得し、出力をDb2表に配置するため、データを操作する便利な方法はユーザー定義関数を使用することです。

このユーザー定義関数の定義者と呼び出し側は、 この新しいユーザー定義関数に次の特性が必要であることを決めます。
  • ユーザー定義関数名は CALC_BONUS である。
  • 2 つの入力フィールドのタイプは DECIMAL(9,2) である。
  • 出力フィールドのタイプは DECIMAL(9,2) である。
  • ユーザー定義関数のプログラムは COBOL で作成し、 ロード・モジュール名を CBONUS とする。
ソース・ユーザー定義関数を作成する基となる組み込み関数または ユーザー定義関数は存在しないため、 関数の実装者は外部ユーザー定義関数をコーディングする必要があります。 実装者は次のステップを行います。
  • COBOL プログラムである、ユーザー定義関数を作成する。
  • プログラムをプリコンパイル、コンパイル、およびリンクする。
  • ユーザー定義関数に SQL ステートメントが含まれる場合は、パッケージをバインドする。
  • そのプログラムの十分なテストを行う。
  • ユーザー定義関数パッケージの実行権限を定義者に与える。
ユーザー定義関数定義者は、このCREATE FUNCTIONステートメントを実行して、CALC_BONUSを以下 Db2に登録します。
CREATE FUNCTION CALC_BONUS(DECIMAL(9,2),DECIMAL(9,2))
  RETURNS DECIMAL(9,2)
  EXTERNAL NAME 'CBONUS'
  PARAMETER STYLE SQL
  LANGUAGE COBOL;

さらに、定義者は CALC_BONUS の実行権限をすべての呼び出し側に与えます。

ユーザー定義関数の呼び出し側は、CALC_BONUS を呼び出す アプリケーション・プログラムを作成し、準備します。 呼び出し側はこのようなステートメントを作成し、それが、 ユーザー定義関数を使用して従業員表の BONUS フィールドを更新します。
UPDATE EMP
  SET BONUS = CALC_BONUS(SALARY,COMM);
呼び出し側は、このステートメントを静的または動的に実行することができます。