CREATE TYPE (配列) ステートメント

CREATE TYPE (配列) ステートメントは配列タイプを定義します。 配列タイプのエレメントは、組み込みデータ・タイプまたはユーザー定義の特殊タイプのいずれかに基づいています。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
  • データベースに対する IMPLICIT_SCHEMA 権限 (配列タイプのスキーマ名が既存のスキーマを指していない場合)
  • スキーマに対する CREATEIN 特権 (配列タイプのスキーマ名が既存のスキーマを指している場合)
  • スキーマに対する SCHEMAADM 権限 (配列タイプのスキーマ名が既存のスキーマを指している場合)
  • DBADM 権限

構文

Read syntax diagramSkip visual syntax diagramCREATE OR REPLACE TYPEtype-nameASdata-type ARRAY[2147483647integer-constantdata-type2]
data-type
Read syntax diagramSkip visual syntax diagrambuilt-in-typeanchored-data-typerow-type-namearray-type-name
data-type2
Read syntax diagramSkip visual syntax diagram INTEGERINTVARCHARCHARACTERCHARVARYING(integerOCTETSCODEUNITS32)anchored-non-row-data-type
anchored-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPE TO variable-nametable-name.column-nameROWOFtable-nameview-namecursor-variable-name
built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( integer,0, integer)FLOAT(53)( integer)REALDOUBLEPRECISIONCHARACTERCHAR(1)( integerOCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( integerOCTETSCODEUNITS32)FOR BIT DATA1CLOBCHARACTERCHARLARGE OBJECT(1M)( integerKMGOCTETSCODEUNITS32)GRAPHIC(1)( integerCODEUNITS16CODEUNITS32)VARGRAPHIC( integerCODEUNITS16CODEUNITS32)DBCLOB(1M)( integerKMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( integer)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( integer)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( integerKMG)BINARY(1)( integer)VARBINARYBINARY VARYING(integer)BLOBBINARY LARGE OBJECT(1M)( integerKMG)DATETIMETIMESTAMP(6)( integer)BOOLEAN
anchored-non-row-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPETO variable-nametable-name.column-name
Notes:
  • 1 The FOR BIT DATA clause can be specified in any order with the other column constraints that follow. The FOR BIT DATA clause cannot be specified with string units CODEUNITS32 (SQLSTATE 42613).

説明

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) 型名
ユーザー定義の行タイプの名前を指定します。 row-type-name がスキーマ名なしで指定される場合、SQL パスでスキーマを検索することにより、row-type-name は解決されます。 行タイプは他の配列タイプ内のエレメントとしてネスト可能で、最大ネスト・レベルは 16 です。
配列タイプ名 (array-type-name)
配列タイプを指定します。 array-type-name をスキーマ名なしで指定すると、SQL パスでスキーマを検索することにより array-type-name は解決されます。 配列タイプは他の配列タイプ内のエレメントとしてネスト可能で、最大ネスト・レベルは 16 です。
アンカー・データ・タイプ
データ・タイプを決定するために使用される別のオブジェクトを指定します。 アンカー・オブジェクトのデータ・タイプには、データ・タイプを直接指定する際に (行の場合は行タイプを作成する際に) 適用されるのと同じ制限が課せられます。
ANCHOR DATA TYPE TO
アンカー・データ・タイプを使用してデータ・タイプを指定することを示します。
variable-name
グローバル変数を指定します。 グローバル変数のデータ・タイプは、配列エレメントのデータ・タイプとして使用されます。
table-name.column-name
既存の表またはビューの列名を指定します。 列のデータ・タイプは、配列エレメントのデータ・タイプとして使用されます。
ROW OF table-name または view-name
table-name で識別される表、または view-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 の最大カーディナリティーを持つ配列であることを指定します。 値は正整数 (非ゼロ) であり、最も大きい正整数値より小さくなければなりません (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)]