次に、UDF およびメソッドのコーディングを行う前に知っておかなければならない重要な概念について説明します。
関数の完全名は、<schema-name>.<function-name> です。関数を参照するどの場所でもこの完全名を使用できます。以下に例を示します。
SLICKO.BOAT_COMPARE SMITH.FOO SYSIBM.SUBSTR SYSFUN.FLOOR
<schema-name>. を省略することもできますが、その場合、DB2 は参照されている関数を識別しなければなりません。以下に例を示します。
BOAT_COMPARE FOO SUBSTR FLOOR
関数パス の概念は、 schema-name を使用しない場合に DB2 により行われる修飾されない 参照を分析する中心となるものです。関数を参照する DDL ステートメント内での関数パスの使用については、 SQL 解説書 を参照してください。関数パスとは、スキーマ名の順序付けられたリストです。これにより、 UDT だけでなく UDF にも修飾されない関数参照を分析する 1 セットのスキーマが提供されます。関数参照が、パス内の複数のスキーマの関数に一致する場合は、パス内のスキーマの順序を使用してこの一致を分析します。関数パスは、静的 SQL の場合はプリコンパイルおよびバインド・コマンド上の FUNCPATH オプションによって設定されます。一方動的 SQL の場合は、SET CURRENT FUNCTION PATH ステートメントにより設定されます。関数パスの省略時値は、次のようになります。
"SYSIBM","SYSFUN","<ID>"
これは静的 SQL と動的 SQL の両方の場合に当てはまります。この場合の <ID> は、現行ステートメントの許可 ID を表します。
関数名は多重定義 することができます。これはすなわち、複数の関数が同じスキーマ内でも同じ名前を持つことができるという意味です。ただし 2 つの関数が同じシグニチャー を持つことはできません。シグニチャーは、定義順に並んだ関数パラメーターすべての定義済みデータ・タイプに連結した、修飾された関数名として定義することができます。多重定義関数の例については、 例: BLOB ストリング検索を参照してください。
修飾された参照または修飾されない参照のいずれの場合も多重定義の事実および、すべての関数参照に最適なもの を選択する関数パスを考慮に入れるのは、 関数選択アルゴリズム です。組み込み関数および SYSFUN スキーマ中の関数 (IBM 提供のものも含む) の参照も、関数選択アルゴリズムを使用して処理されます。
ユーザー定義関数はそれぞれ、 スカラー関数、 列関数、または表関数 として分類されます。 スカラー関数 は、呼び出されるたびに単一の値応答を戻します。たとえば、組み込み関数 SUBSTR() はスカラー関数です。スカラー UDF およびメソッドは、外部 (C などのプログラミング言語でコード化されている) とソース (既存関数のインプリメンテーションを使用している) のいずれかです。
列関数 は、類似した値の集合 (データの列) を受け取り、この値の集合から単一の値応答を戻します。これらの関数は、DB2 では総計関数 とも呼ばれます。列関数の例としては、組み込み関数 AVG() があります。 DB2 に対して、外部列 UDF は定義できませんが、組み込み列関数をソースとする列 UDF は定義できます。これは特殊タイプの場合に便利です。たとえば、基本タイプ INTEGER によって定義された特殊タイプ SHOESIZE が存在する場合、 AVG(SHOESIZE) という UDF を、既存の組み込み列関数 AVG(INTEGER) をソースとする列関数として定義できます。
表関数 は、参照元の SQL ステートメントに表を戻します。表関数を参照できるのは、 SELECT ステートメントの FROM 文節内だけです。このような関数を使用すると、SQL 言語を DB2 以外のデータに適用したり、 DB2 以外のデータを取得してそれを DB2 の表に入れることができます。たとえば、DB2 以外のデータで構成されるファイルを表に変換したり、 WWW やオペレーティング・システムからデータを入手してそれを表として戻すことができます。表関数は、外部関数にすることしかできません。
関数パスの概念、SET CURRENT FUNCTION PATH ステートメント、および関数選択アルゴリズムについては、 SQL 解説書 で詳しく説明しています。 FUNCPATH プリコンパイルおよびバインド・オプションについては、 コマンド解説書 で詳しく説明しています。
UDF やメソッドおよび組み込み関数を連合システムのデータ・ソース関数にマッピングする概念については、 SQL 解説書 を参照してください。そのようなマップの作成の指針については、データ・ソース関数の呼び出しを参照してください。