外部関数

外部ユーザー定義関数 は、プログラミング言語で記述された関数です。 外部関数は、関数の呼び出し時に実行されるロジックを含む外部プログラムの参照によって、データベースに定義されます。

単一値を戻す外部ユーザー定義関数はスカラー関数です。 表を戻す外部ユーザー定義関数は表関数です。

外部ユーザー定義関数は、アセンブラー、C、C++、COBOL、PL/I、または Java で作成することができます。 COBOLで記述されたユーザー定義関数には、他のDb2COBOLプログラムと同様に、オブジェクト指向の拡張機能を含めることができます。 Java™で記述されるユーザー定義関数は、Java固有のコーディングガイドラインと制限に従う必要があります。 Javaユーザー定義関数の記述方法については、「Javaストアドプロシージャおよびユーザー定義関数 」を参照してください。

例 1: 外部ユーザー定義スカラー関数の定義
プログラマーは、 最大長が 500 KB の CLOB 値の、 最大長が 200 のストリングの検索を行うユーザー定義関数を開発します。 次の CREATE FUNCTION ステートメントは、ユーザー定義関数を定義します。
CREATE FUNCTION FINDSTRING (CLOB(500K), VARCHAR(200))
  RETURNS INTEGER
  CAST FROM FLOAT
  SPECIFIC FINDSTRINGCLOB
  EXTERNAL NAME 'FINDSTR'
  LANGUAGE C
  PARAMETER STYLE SQL
  NO SQL
  DETERMINISTIC
  NO EXTERNAL ACTION;

この関数は、状況コードを整数として戻します。 CAST FROM 節が指定されるのは、関数操作の結果が浮動小数点値になるためであり、ユーザーが SQL ステートメントの結果として整数を予期しているためです。 このユーザー定義関数は C で書かれていて、SQL ステートメントは 含まれていません。

FINDSTRING ユーザー定義関数に、CLOB タイプの他に BLOB データ・タイプでも機能させる必要があるとします。 BLOB タイプを入力として指定する FINDSTRING ユーザー定義関数の別インスタンスを定義することができます。

CREATE FUNCTION FINDSTRING (BLOB(500K), VARCHAR(200))
  RETURNS INTEGER
  CAST FROM FLOAT
  SPECIFIC FINDSTRINGBLOB
  EXTERNAL NAME 'FNDBLOB'
  LANGUAGE C
  PARAMETER STYLE SQL
  NO SQL
  DETERMINISTIC;

FINDSTRING の各インスタンスは、別アプリケーション・プログラムを使用して 、ユーザー定義関数のロジックをインプリメントします。

例 2: 外部ユーザー定義スカラー関数の定義
プログラマーは、除算のユーザー定義関数を作成しました。 すなわち、このユーザー定義関数は、 アプリケーション・プログラムが、除算演算子 (/) を使用して以下のステートメントのようなステートメントを実行するときに呼び出されます。
UPDATE TABLE1 SET INTCOL1="/"(INTCOL2,INTCOL3);
ユーザー定義関数は、入力データとして 2 つの整数値を使用します。 ユーザー定義関数からの出力データのタイプは整数です。 ユーザー定義関数は MATH スキーマにあって、 アセンブラーで書かれ、SQL ステートメントを含みません。 次の CREATE FUNCTION ステートメントは、ユーザー定義関数を定義します。
CREATE FUNCTION MATH."/" (INT, INT)
  RETURNS INTEGER
  SPECIFIC DIVIDE
  EXTERNAL NAME 'DIVIDE'
  LANGUAGE ASSEMBLE
  PARAMETER STYLE SQL
  NO SQL
  DETERMINISTIC;
例 3: 外部ユーザー定義表関数の定義
アプリケーション・ プログラマーは、2 つの入力値を受け取り、表を戻すユーザー定義関数を作成します。 この 2 つの入力値は、次のとおりです。
  • 件名を記述する最大長 30 の文字ストリング
  • 検索するテキストを含む最大長 255 の文字ストリング

このユーザー定義関数は、指定された件名に関する複数文書を、指定された検索ストリングを使ってスキャンし、検索条件に適合する文書リストを、各文書の要約とともに戻します。 このリストは 2 つの列を持つ表の形式です。 最初の列は、文書 ID を含む、長さ 16 の文字列です。 2 番目の列は、文書の要約を含む最大長 5000 の可変長文字列です。

このユーザー定義関数は、COBOL でコーディングされ、SQL のみを使って照会を実行し、 指定された入力に対しては常に同じ出力を生成します。 CARDINALITY オプションは、このユーザー定義関数の呼び出しにより、 約 20 行が戻されると予想されることを指定します。

次の CREATE FUNCTION ステートメントは、ユーザー定義関数を定義します。

CREATE FUNCTION DOCMATCH (VARCHAR(30), VARCHAR(255))
  RETURNS TABLE (DOC_ID CHAR(16), DOC_ABSTRACT VARCHAR(5000))
  EXTERNAL NAME 'DOCMTCH'
  LANGUAGE COBOL
  PARAMETER STYLE SQL
  READS SQL DATA
  DETERMINISTIC
  CARDINALITY 20;