配列の値
配列値 は、エレメントの順序付きコレクションが含まれる構造です。
配列値のエレメントはすべて同じデータ・タイプでなければなりません。 配列のカーディナリティーは、配列のエレメントの数と同じです。
配列値は、空以外、空 (カーディナリティー・ゼロ)、または NULL にすることができます。 配列の各エレメントは、NULL または NULL 以外にすることができます。 空の配列、NULL の配列値、すべてのエレメントが NULL 値である配列は、それぞれ異なります。 未初期化の配列は NULL の配列です。
以下の例は、空の配列、NULL の配列、および個々のエレメントが NULL である配列の違いを示しています。
SET PHONELIST = ARRAY[];
/* Set an entire array to empty */
SET PHONELIST = NULL;
/* Set an entire array to the NULL value */
SET PHONELIST = ARRAY[NULL];
/* Set one element of an array to NULL */
SET PHONELIST = ARRAY[NULL, NULL, NULL];
/* Set three elements of an array to NULL */
通常配列 には、定義されたエレメント数の上限があります。これは、最大カーディナリティーとして知られています。 配列の各エレメントは、配列のそのエレメントの位置を表す関連付けられた添字値によって参照されます。 添字値のデータ・タイプは INTEGER です。 n が通常配列のエレメントの数である場合、各エレメントに関連付けられている順序を示す位置は、1 以上 n 以下の整数値です。
C などのプログラミング言語の配列の最大カーディナリティーとは違い、SQL の通常配列の最大カーディナリティーは、配列の物理表現と関連していません。 通常配列の値を表すために必要なメモリーの量は通常、配列タイプの最大カーディナリティーではなく、配列のカーディナリティーに比例します。 通常配列が参照されると、配列のすべての値がメイン・メモリーに保管されます。 したがって、大量のデータが含まれている通常配列は、大量のメイン・メモリーを消費します。
連想配列 には、事前定義されたエレメント数の上限がありません。 連想配列には、ゼロ個以上のエレメントの順序付きセットが含まれています。この配列の各エレメントは、関連付けられた添字値によって順序付けされ、添字値を使用して参照できます。 添字値のデータ・タイプは整数または文字ストリング (CLOB 以外) にすることができますが、配列のすべての添字値が同じデータ・タイプでなければなりません。 連想配列の添字値は一意ですが、連続する値である必要はありません。
ユーザー定義配列タイプ は、配列として定義されたユーザー定義のデータ・タイプです。
グローバル変数、SQL 変数、または SQL パラメーターは、ユーザー定義の配列タイプとして定義できます。
さらに、ARRAY_DELETE 組み込み関数または TRIM_ARRAY 組み込み関数の呼び出しの結果、または CAST 指定の結果もユーザー定義配列タイプにすることができます。
ユーザー定義配列タイプのエレメントは、その配列のエレメントと同じデータ・タイプを戻す式を使用できる場所であれば、どこからでも参照できます。
無名配列タイプ は、ユーザー定義データ・タイプが関連付けられていない配列です。 集約組み込み関数 ARRAY_AGG または配列コンストラクターの呼び出しの結果は、ユーザー定義データ・タイプが関連付けられていない配列です。 ユーザー定義の配列タイプが関連付けられていない配列のエレメントは、直接参照できません。
添字の値を式で指定することができます。 その式には、列への参照を含めることができます。 列に列マスクが定義されている場合、列マスクを適用する際の通常の規則を使用して列マスクが適用されます。
配列エレメントの添字の値が NULL になることはありません。 添字の値を指定している式が NULL 値と評価された場合、その NULL 値は配列値として戻されます。
配列値は、以下のいずれかの方法で指定することができます。
ユーザー定義配列タイプであるグローバル変数、SQL 変数、または SQL パラメーターの単純参照。
- ARRAY_AGG 関数の呼び出し。
- ARRAY_DELETE 組み込み関数または TRIM_ARRAY 組み込み関数の呼び出し。
- 配列コンストラクターの使用。
- 配列値を戻す CAST 指定の呼び出し。
配列値は、表に保管することも外部アプリケーションに返すこともできません。
配列のエレメントの日時データは CCSID UNICODE (1208) であると見なされます。