関数のタイプ
関数を分類する方法は、いくつかあります。
その 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® データベースにアクセスして結果表を戻したりすることができます。