ユーザー定義関数

ユーザー定義関数 (UDF) は、SQL 言語の既存の組み込み関数に対する拡張または追加です。

構文図を読む構文図をスキップするfunction-name(,expressionrow-expression)

ユーザー定義関数は、呼び出されるたびに単一値を戻すスカラー関数、 互いに似通った一連の値を渡されてその中から単一値を戻す集約関数、1 行を戻す行関数、 または表を戻す表関数のいずれでかです。

SYSFUN および SYSPROC スキーマでは、 多数のユーザー定義関数が提供されています。

UDF が既存の集約関数をソースとして派生される場合にのみ、UDF は集約関数になります。 UDF は、 修飾または無修飾の関数名、およびその後に括弧で囲んだその関数の引数 (ある場合) を指定することによって参照します。 データベースに登録されたユーザー定義の列関数またはスカラー関数は、 組み込み関数を使用できるのと同じコンテキストで参照することができます。 ユーザー定義の行関数は、ユーザー定義タイプのトランスフォーム関数として登録しておく場合に限り、 暗黙的に参照できます。 データベースに登録されたユーザー定義の表関数は、 SELECT ステートメントの FROM 節でのみ参照することができます。

関数の引数の数および位置は、 データベースに登録された時点のユーザー定義関数に指定されたパラメーターと対応していなければなりません。 さらに、引数は、対応する定義済みパラメーターのデータ・タイプにプロモート可能なデータ・タイプでなければなりません。

関数の結果は、RETURNS 節に指定されます。 RETURNS 節 (UDF の登録時に定義される) は、 関数が表関数かどうかを決定します。 関数登録時に RETURNS NULL ON NULL INPUT 節が指定されていると (あるいはデフォルトでそうなっていると)、 引数のいずれかが NULL 値の場合には、結果は NULL 値になります。 表関数の場合、これは、戻される表は行を備えていない (つまり、空の表) という意味に解釈されます。

規則および行データ・タイプについて詳しくは、『行式』を参照してください。

以下に、 ユーザー定義関数例をいくつか示します。

  • ADDRESS というスカラー UDF は、 スクリプト・フォーマットで保管されているレジュームからホーム・アドレスを抽出します。 この ADDRESS 関数には、CLOB 引数を指定し、VARCHAR(4000) の値が戻されます。
       SELECT EMPNO, ADDRESS(RESUME) FROM EMP_RESUME
         WHERE RESUME_FORMAT = 'SCRIPT'
  • 表 T2 には、数値列 A があります。前の例の ADDRESS というスカラー UDF を以下のように呼び出すと、
       SELECT ADDRESS(A) FROM T2
    名前が一致して引数からプロモート可能なパラメーターを持つ関数がないので、 エラー (SQLSTATE 42884) が生じます。
  • WHO という表 UDF は、 ステートメントの実行時にアクティブであった、 サーバー・マシン上のセッションに関する情報を戻します。 WHO 関数は、 キーワード TABLE および必須相関変数からなる FROM 節内から呼び出されます。 WHO() 表の列名は、CREATE FUNCTION ステートメントで定義されます。
       SELECT ID, START_DATE, ORIG_MACHINE
         FROM TABLE( WHO() ) AS QQ
         WHERE START_DATE LIKE 'MAY%'