ルーチン: 関数

関数とは、入力データ値の集合と結果値の集合とを関係付けるものです。 それらを使用することで、SQL を拡張、カスタマイズすることができます。 関数の呼び出しは、選択リストや FROM 節など、 SQL ステートメントのエレメント内から行います。

関数には次の 4 つのタイプがあります。
  • 集約関数
  • スカラー関数
  • 行関数
  • 表関数
集約関数
集約関数 (列関数ともいう) は、 類似した入力値のセットの評価結果としてスカラー値を戻します。 類似した入力値の指定は、表内の列や VALUES 節内の組などで行えます。 この値のセットのことを引数セットといいます。 例えば、以下の照会は、SUM 集約関数を使用して、在庫と注文を合わせたボルトの合計数量を計算します。
    SELECT SUM (qinstock + qonorder)
    FROM inventory
    WHERE description LIKE '%Bolt%'
スカラー関数
スカラー関数は、 1 つ以上のスカラー・パラメーターのセットごとに 1 つのスカラー値を戻す関数です。 例えば、LENGTH 関数や SUBSTR 関数などはスカラー関数です。 また、関数入力パラメーターに対する複雑な数値計算を行うスカラー関数を作成することもできます。 選択リストや FROM 節など、 SQL ステートメント内で式が有効な場所であれば、どこからでもスカラー関数を参照できます。 以下の例は、組み込み LENGTH スカラー関数を参照する照会を示しています。
    SELECT lastname, LENGTH(lastname)
    FROM employee
行関数
行関数は、1 つ以上のスカラー・パラメーターのセットごとに 1 つの行を戻す関数です。 行関数は、構造化タイプの属性を行内の組み込みデータ・タイプ値にマップする Transform 関数としてのみ使用することができます。
表関数
表関数は、1 つ以上のパラメーターのセットのグループごとに、 表を参照する SQL ステートメントにその表を戻す関数です。 表関数は SELECT ステートメントの FROM 節内でしか参照できません。 表関数から戻される表は、 結合、グループ化演算、UNION のようなセット演算、 読み取り専用ビューを対象とするあらゆる演算に組み込めます。 以下の例は、在庫表を更新して、その更新された在庫表に対する照会の結果セットを戻す SQL 表関数を示します。
CREATE FUNCTION updateInv(itemNo VARCHAR(20), amount INTEGER)
   RETURNS TABLE (productName VARCHAR(20),
                  quantity INTEGER)
   LANGUAGE SQL
   MODIFIES SQL DATA
   BEGIN ATOMIC
 
     UPDATE Inventory as I
       SET quantity = quantity + amount
         WHERE I.itemID = itemNo;
 
     RETURN
       SELECT I.itemName, I.quantity
         FROM Inventory as I
           WHERE I.itemID = itemNo;
   END
関数は、以下のフィーチャーのサポートを提供します。
  • 機能は、 Db2Db2 for z/OS® 、および Db2 ( IBM® i の場合) などの Db2® ブランド・データベース製品全体でサポートされます。
  • SQL ステートメントの実行を適度にサポートします。
  • 入力パラメーターおよびスカラー関数または集約関数の戻り値に対するパラメーター・サポート
  • 関数を参照する照会に、関数のロジックを効果的にまとめることができます。
  • 外部関数は、各行または値ごとに個別の関数副次呼び出しの間の中間値を保管するサポートを提供します。

すぐに使用可能な組み込み関数があります。あるいは、ユーザーがユーザー定義関数を作成することもできます。 関数は、SQL 関数または外部関数としてインプリメントすることができます。 SQL 関数はコンパイルまたはインライン化することができます。 インライン関数は、コンパイルされた関数よりも速く実行できますが、実行できるのは SQL PL 言語のサブセットだけです。 詳しくは CREATE FUNCTION ステートメントを参照してください。