CREATE TYPE (配列) ステートメント
CREATE TYPE (配列) ステートメントは配列タイプを定義します。配列タイプのエレメントは、組み込みデータ・タイプまたはユーザー定義の特殊タイプのいずれかに基づいています。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
- データベースに対する IMPLICIT_SCHEMA 権限 (配列タイプのスキーマ名が既存のスキーマを指していない場合)
- スキーマに対する CREATEIN 特権 (配列タイプのスキーマ名が既存のスキーマを指している場合)
- スキーマに対する SCHEMAADM 権限 (配列タイプのスキーマ名が既存のスキーマを指している場合)
- DBADM 権限
構文
説明
- OR REPLACE
- データ・タイプの定義が現行のサーバー上に存在している場合に、そのデータ・タイプの定義を置換するために指定します。 既存の定義は、カタログ内で新しい定義が置き換えられる前に事実上ドロップされます。ただし例外として、置き換えられるデータ・タイプを使用してパラメーターまたは戻り値が定義されている関数とメソッドは、ドロップされる代わりに無効にされます。 既存の定義は構造化タイプであってはなりません (SQLSTATE 42809)。 このオプションは、データ・タイプの定義が現行サーバーに存在しない場合は無視されます。
- type-name
-
タイプの名前を指定します。名前 (暗黙または明示の修飾子を含む) は、現行サーバーに既に存在するその他のタイプ (組み込みタイプまたはユーザー定義タイプ) と同じであってはなりません。
非修飾名は、組み込みデータ・タイプまたは VARBINARY と同一の名前であってはなりません (SQLSTATE 42918)。
述部のキーワードとして使用されるいくつかの名前は、システム使用に予約されており、 type-name として使用することはできません (SQLSTATE 42939)。 それらの名前は、SOME、ANY、ALL、NOT、AND、OR、BETWEEN、NULL、LIKE、 EXISTS、IN、UNIQUE、OVERLAPS、SIMILAR、MATCH および比較演算子です。
2 つの部分からなる type-name を指定する場合、文字 SYS で始まるスキーマ名は使用してはなりません (SQLSTATE 42939)。
- data-type
- 配列エレメントのデータ・タイプを指定します。
- built-in-type
- 組み込みデータ・タイプを指定します。組み込みデータ・タイプの説明については、『CREATE TABLE』を参照してください。 組み込みタイプには、『CREATE TABLE』で記述されているデータ・タイプ (参照、SYSPROC.Db2SECURITYLABEL、XML、またはユーザー定義タイプ以外のもの) が組み込まれています (SQLSTATE 429C2)。
- row-type-name
- ユーザー定義の行タイプの名前を指定します。row-type-name がスキーマ名なしで指定される場合、SQL パスでスキーマを検索することにより、row-type-name は解決されます。行タイプは他の配列タイプ内のエレメントとしてネスト可能で、最大ネスト・レベルは 16 です。
- array-type-name
- 配列タイプを指定します。 array-type-name をスキーマ名なしで指定すると、SQL パスでスキーマを検索することにより array-type-name は解決されます。 配列タイプは他の配列タイプ内のエレメントとしてネスト可能で、最大ネスト・レベルは 16 です。
- anchored-data-type
- データ・タイプを決定するために使用される別のオブジェクトを指定します。アンカー・オブジェクトのデータ・タイプには、データ・タイプを直接指定する際に (行の場合は行タイプを作成する際に) 適用されるのと同じ制限が課せられます。
- ANCHOR DATA TYPE TO
- アンカー・データ・タイプを使用してデータ・タイプを指定することを示します。
- variable-name
- グローバル変数を指定します。グローバル変数のデータ・タイプは、配列エレメントのデータ・タイプとして使用されます。
- table-name.column-name
- 既存の表またはビューの列名を指定します。列のデータ・タイプは、配列エレメントのデータ・タイプとして使用されます。
- ROW OF table-name または view-name
- table-name で識別される表、または view-name で識別されるビューの列名および列データ・タイプを基にした名前とデータ・タイプを含むフィールドの行になるように指定します。配列エレメントのデータ・タイプは名前なしの行タイプです。
- ROW OF cursor-variable-name
- cursor-variable-name で識別されるカーソル変数のフィールド名およびフィールド・データ・タイプを基にした名前とデータ・タイプを含めて、フィールドの行を指定します。指定するカーソル変数は、以下のいずれかのエレメントでなければなりません (SQLSTATE 428HS)。
- 厳密に型付けされたカーソル・データ・タイプのグローバル変数
- すべての結果列が名前指定されている select-statement を指定した CONSTANT 節を使用して作成または宣言された、緩やかに型付けされたカーソル・データ・タイプのグローバル変数
- anchored-non-row-data-type
- データ・タイプを決定するために使用される別のオブジェクトを指定します。アンカー・オブジェクトの
データ・タイプには、データ・タイプを直接的に指定する際に適用されるのと同じ制限が課せられます。
- ANCHOR DATA TYPE TO
- アンカー・データ・タイプを使用してデータ・タイプを指定することを示します。
- variable-name
- データ・タイプが INTEGER または VARCHAR であるグローバル変数を指定します。 グローバル変数のデータ・タイプは、配列指標のデータ・タイプとして使用されます。
- table-name.column-name
- データ・タイプが INTEGER または VARCHAR である既存の表またはビューの列名を指定します。列のデータ・タイプは、配列指標のデータ・タイプとして使用されます。
- ARRAY [integer-constant]
- タイプが integer-constant の最大カーディナリティーを持つ配列であることを指定します。
値は正整数 (非ゼロ) であり、最も大きい正整数値より小さくなければなりません (SQLSTATE 42820)。
デフォルトは最も大きい正整数値 (2 147 483 647) です。配列値のカーディナリティーは、配列値に割り当てられる最高のエレメント位置によって判別されます。
特定のシステムにおける配列の最大カーディナリティーは、データベース・アプリケーションが使用可能な合計メモリー量により制限されます。そのため、大きなカーディナリティーの配列を作成することはできますが、すべてのエレメントを使用できるとは限りません。
- ARRAY[data-type2]
- タイプが、データ・タイプ data-type2 の値を使用して指標付けされる連想配列であることを指定します。データ・タイプは、INTEGER または VARCHAR データ・タイプでなければなりません (SQLSTATE 429C2)。配列エレメントの割り当て時に指標として指定される値は、data-type2 の値に割り当てることができなければなりません。配列値のカーディナリティーは、配列エレメントの割り当て時に使用される固有の指標値の数によって判別されます。
規則
- アンカー・データ・タイプの使用: アンカー・データ・タイプは次のオブジェクトを参照できません (SQLSTATE 428HS): ニックネーム、型付き表、型付きビュー、式ベースの索引に関連付けられた統計ビュー、宣言済み一時表、緩やかに型付けされたカーソルに関連付けられた行定義、データベース・コード・ページまたはデータベース照合とは異なるコード・ページまたは照合を使用するオブジェクト。
注
- 配列タイプの使用法: 配列タイプは、以下のデータ・タイプとしてのみ使用できます。
- コンパウンド SQL (コンパイル済み) ステートメント内のローカル変数
- SQL ルーチンのパラメーター
- Java™ プロシージャーのパラメーター (ネストなしの通常配列のみ)
- SQL 関数の戻りタイプ
- グローバル変数
- 配列タイプを使用して定義された変数またはパラメーターは、コンパウンド SQL (コンパイル済み) ステートメントでのみ使用できます。
例
例 1: エレメント数が最大 50 でデータ・タイプが DECIMAL(10,0) である PHONENUMBERS という名前の配列タイプを作成します。
CREATE TYPE PHONENUMBERS AS DECIMAL(10,0)
ARRAY[50]例 2: スキーマ GENERIC にデフォルトの数のエレメントを持つ、NUMBERS という名前の配列タイプを作成します。
CREATE TYPE GENERIC.NUMBERS AS DECFLOAT(34)
ARRAY[]例 3: 'Home'、'Work'、または 'Mom' のようなストリングによって指標付けされる、DECIMAL(16, 0) のエレメントを持つ PERSONAL_PHONENUMBERS という名前の連想配列を作成します。
CREATE TYPE PERSONALPHONENUMBERS AS DECIMAL(16, 0) ARRAY[VARCHAR(8)]例 4: 索引が州、地域、または国名で、エレメントが州都である連想配列タイプを作成します。
CREATE TYPE CAPITALSARRAY AS VARCHAR(30) ARRAY[VARCHAR(20)]例 5: 長さが最大 40 文字の製品説明に関する連想配列タイプを作成します。索引は、長さが最大 12 文字の製品番号です。
CREATE TYPE PRODUCTS AS VARCHAR(40) ARRAY[VARCHAR(12)]