関数のタイプ

関数を分類する方法は、いくつかあります。

その 1 つの方法は、組み込み、ユーザー定義、 または特殊タイプ用に生成されたユーザー定義関数として分類することです。

  • データベース・マネージャーには組み込み関数 が付属しています。 これらの関数は、単一の値の結果を提供します。組み込み関数には、"+" のような演算子関数、AVG のような集約関数、あるいは SUBSTR のようなスカラー関数が含まれています。組み込みの集約およびスカラー関数のリストとこれらの関数についての詳細については、組み込み関数を参照してください。

    組み込み関数 はスキーマ QSYS2 の一部です。 1

  • ユーザー定義関数 は、CREATE FUNCTION ステー トメントを使用して作成され、カタログ表 QSYS2.SYSROUTINES およ びカタログ・ビュー QSYS2.SYSFUNCS でデータベース・マネージャーに登録されます。詳しくは、CREATE FUNCTIONを参照してください。 これらの 関数により、ユーザー独自の、あるいはサード・パーティーのベンダーの 関数定義を追加することによって、データベース・マネージャーの機能を拡張 することができます。

    ユーザー定義関数は、SQL外部、またはソース 関数のいずれかです。SQL 関数は、SQL ステートメントのみを使用して、データベースに定義されます。 外部関数は、関数が呼び出されたときに実行される外部プログラムまたはサービス・プログラムへの参照を伴って、データベースに定義されます。 ソース関数は、組み込み関数または別のユーザー定義関数への参照を伴って、データベースに定義されます。 ソース関数を使用して、特殊タイプで用いる組み込みの集約およびスカラー関数を拡張することができます。

    ユーザー定義関数は、それが作成されたスキーマに常駐します。そのスキーマが、QSYS、QSYS2、QTEMP、SYSIBM、または SYSPROC ということはあり得ません。

  • 特殊タイプ用に生成されたユーザー定義関数 とは、 CREATE TYPE ステートメントを使用して特殊タイプが作成されたときに、 データベース・マネージャーが自動的に生成する関数です。 これらの関数は、特殊タイプからソース・タイプへ、さらにソース・タイプから特殊タイプへのキャストをサポートします。 特殊タイプはそれ自体とのみしか互換性がないため、データ・タイプ間のキャストの可能性は重要です。

    生成されたキャスト関数は、対象となった特殊タイプと同じスキーマに 常駐します。そのスキーマが、QSYS、QSYS2、QTEMP、SYSIBM、または SYSPROC ということはあり得ません。特殊タイプ用に生成される関数の詳細については、CREATE TYPE (特殊)を 参照してください。

関数を分類するもう 1 つの方法では、入力データの値と結果の値によって、集約関数、スカラー関数、または表関数として分類します。

  • 集約関数 は、それぞれの引数ごとに値のセット (列の値など) を受け取り、入力値のセットについて単一の値の結果を戻します。 集約関数は、しばしば、列関数 と呼ばれます。 組み込み関数およびユーザー定義のソース関数は、集約関数になり得ます。
  • スカラー関数 は、それぞれの引数ごとに単一の値を受け取り、単一の値の結果を戻します。 組み込み関数およびユーザー定義関数は、スカラー関数になり得ます。 また、特殊タイプ用に生成されたユーザー定義関数もスカラー関数です。
  • 表関数 は、受け取った引数のセットに関する表を戻します。 各引数はそれぞれ単一の値です。 表関数は、副選択の FROM 文節の中でのみ参照することができます。 表関数は、外部関数または SQL 関数として定義できます。ただし、表関数は ソース関数となることはできません。

    表関数を使用して、データベースに格納されていないデータに SQL 言語処理能力を適用したり、その種のデータが表に格納されているかのようにアクセスしたりできます。例えば、表関数により、特定のファイルを読み取ったり、Web からデータを取得したり、Lotus Notes® データベースにアクセスして結果表を戻したりすることができます。

1 組み込み関数 は、データベース・マネージャーによって 内部的にインプリメントされており、したがって、関連するプログラムやサービス・プログラム・オブジェクトは、組み込み関数 には存在しません。さらに、カタログには組み込み関数 についての情報は含まれていません。しかしながら、組み込み関数 は、あたかも QSYS2 に存在しているように取り扱うことができ、組み込み関数 名は QSYS2 で修飾することができます。