CREATE TYPE (行) ステートメント

CREATE TYPE (行) ステートメントは、行タイプを定義します。 行タイプには、データの行を構成する関連付けられたデータ・タイプを持つ 1 つ以上のフィールドが含まれます。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、あるいは対話式に発行することができます。 このステートメントは、動的に作成できる実行可能ステートメントです。

許可

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

構文

Read syntax diagramSkip visual syntax diagramCREATE OR REPLACE TYPEtype-nameAS ROW(,field-definition )anchored-row-data-type
field-definition
Read syntax diagramSkip visual syntax diagramfield-namedata-type
data-type
Read syntax diagramSkip visual syntax diagrambuilt-in-typeanchored-non-row-data-typeanchored-row-data-typerow-type-namearray-type-namedistinct-type-name
built-in-type
Read syntax diagramSkip visual syntax diagramSMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( integer,0, integer)FLOAT(53)( integer)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1 BYTE)( 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 TYPE TO variable-nametable-name.column-name
anchored-row-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPE TO variable-nameROWOFtable-nameview-namecursor-variable-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
タイプの名前を指定します。 この名前 (暗黙修飾子または明示修飾子を含む) で、カタログに既に記述されている他のタイプ (組み込みタイプ、構造化タイプ、配列タイプ、行タイプ、または特殊タイプ) を指定することはできません。 非修飾名は、組み込みデータ・タイプと同じ名前にすることはできません (SQLSTATE 42918)。

述部のキーワードとして使用されるいくつかの名前はシステム使用に予約されており、タイプ名として使用することはできません (SQLSTATE 42939)。 それらの名前は、SOME、ANY、ALL、NOT、AND、OR、BETWEEN、NULL、LIKE、EXISTS、IN、UNIQUE、OVERLAPS、SIMILAR、MATCH および比較演算子です。

2 部構成の名前を指定する場合、文字 SYS で始まるスキーマ名は使用できません (SQLSTATE 42939)。

フィールド定義
行タイプのフィールドを定義します。
field-name
行タイプ内のフィールドの名前を指定します。 この名前は、この行タイプの他のフィールドと同じにすることはできません (SQLSTATE 42711)。
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 です。
特殊タイプ名 (distinct-type-name)
ユーザー定義の特殊データ・タイプを指定します。 指定された特殊タイプは、データ・タイプ制約を持つことができません (SQLSTATE 429C5)。
アンカー非行データ・タイプ (anchored-non-row-data-type)
データ・タイプを決定するために使用される別のオブジェクトを指定します。 アンカー・オブジェクトの データ・タイプには、データ・タイプを直接的に指定する際に適用されるのと同じ制限があります。
ANCHOR DATA TYPE TO
アンカー・データ・タイプを使用してデータ・タイプを指定することを示します。
variable-name
サポートされている行フィールドのデータ・タイプであるデータ・タイプを持つグローバル変数を指定します。 グローバル変数のデータ・タイプが、フィールドのデータ・タイプとして使用されます。
table-name.column-name
組み込みタイプまたは特殊タイプであるデータ・タイプを持つ既存の表またはビューの列名を指定します。 列のデータ・タイプが、フィールドのデータ・タイプとして使用されます。
アンカー行データ・タイプ (anchored-row-data-type)
行のフィールドとして使用する別のオブジェクトからの行情報を指定します。
ANCHOR DATA TYPE TO
データ・タイプの指定にアンカー・データ・タイプを使用することを示します。
variable-name
グローバル変数を指定します。 参照される変数のデータ・タイプは、行タイプでなければなりません。
ROW OF table-name または view-name
table-name で識別される表、または view-name で識別されるビューの列名および列データ・タイプを基にした名前とデータ・タイプを含むフィールドの行になるように指定します。 アンカー・オブジェクトの列のデータ・タイプには、フィールドのデータ・タイプに適用されるのと同じ制限があります。
行の終わり cursor-variable-name
cursor-variable-name で識別されるカーソル変数のフィールド名およびフィールド・データ・タイプを基にした名前とデータ・タイプを含めて、フィールドの行を指定します。 指定するカーソル変数は、以下のいずれかのオブジェクトでなければなりません (SQLSTATE 428HS)。
  • 厳密に型付けされたカーソル・データ・タイプのグローバル変数
  • すべての結果列が名前指定されている select-statement を指定した CONSTANT 節を使用して作成または宣言された、緩やかに型付けされたカーソル・データ・タイプのグローバル変数

ルール

  • アンカー・データ・タイプの使用: アンカー・データ・タイプは次のオブジェクトを参照できません (SQLSTATE 428HS): ニックネーム、型付き表、型付きビュー、式ベースの索引に関連付けられた統計ビュー、宣言済み一時表、緩やかに型付けされたカーソルに関連付けられた行定義、データベース・コード・ページまたはデータベース照合とは異なるコード・ページまたは照合を使用するオブジェクト。

  • 行タイプの使用法: 行タイプは、以下のデータ・タイプとしてのみ使用できます。
    • コンパウンド SQL (コンパイル済み) ステートメント内のローカル変数
    • SQL ルーチンのパラメーター
    • SQL 関数の戻りタイプ
    • 配列タイプのエレメント
    • ユーザー定義カーソル・タイプ
    • グローバル変数
  • 行タイプを使用して定義された変数またはパラメーターは、コンパウンド SQL (コンパイル済み) ステートメントでのみ使用できます。

  • DEPARTMENT 表の列に基づき行タイプを作成します。
    CREATE TYPE DEPTROW AS ROW (DEPTNO   VARCHAR(3),
                                DEPTNAME VARCHAR(29),
                                MGRNO    CHAR(6),
                                ADMRDEPT CHAR(3),
                                LOCATION CHAR(16))