CREATE TYPE (カーソル) ステートメント

CREATE TYPE (カーソル) ステートメントは、ユーザー定義のカーソル・タイプを定義します。

呼び出し

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

許可

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

構文

Read syntax diagramSkip visual syntax diagramCREATE OR REPLACE TYPEtype-nameAS anchored-row-data-typerow-type-name CURSOR
anchored-row-data-type
Read syntax diagramSkip visual syntax diagramANCHORDATA TYPE TO variable-nameROWOFtable-nameview-namecursor-variable-name

説明

OR REPLACE
データ・タイプの定義が現行のサーバー上に存在している場合に、そのデータ・タイプの定義を置換するために指定します。 既存の定義は、カタログ内で新しい定義が置き換えられる前に事実上ドロップされます。ただし例外として、置き換えられるデータ・タイプを使用してパラメーターまたは戻り値が定義されている関数とメソッドは、ドロップされる代わりに無効にされます。 既存の定義は構造化タイプであってはなりません (SQLSTATE 42809)。 このオプションは、データ・タイプの定義が現行サーバーに存在しない場合は無視されます。
type-name

タイプの名前を指定します。 名前 (暗黙または明示の修飾子を含む) は、現行サーバーに既に存在するその他のタイプ (組み込みタイプまたはユーザー定義タイプ) と同じであってはなりません。 非修飾名は、組み込みデータ・タイプ、または BOOLEAN、BINARY、または 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)。

アンカー行データ・タイプ (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 節を使用して作成または宣言された、緩やかに型付けされたカーソル・データ・タイプのグローバル変数
カーソル変数のカーソル・タイプが、名前指定された行タイプを使用する厳密な型判定ではない場合、そのカーソル・タイプに関連した行タイプは、名前なしの行タイプになります。
行 (ROW) 型名
カーソル・タイプの変数に割り当てられた select-statement の結果表の行タイプの検査に使用する行タイプを指定します。 型検査に失敗すると、割り当ても失敗します (SQLSTATE 42821)。 row-type-name がスキーマ名なしで指定される場合、SQL パスでスキーマを検索することにより、行タイプは解決されます。

ルール

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

  • カーソル・タイプの使用法: カーソル・タイプは、以下のデータ・タイプとしてのみ使用できます。
    • コンパウンド SQL (コンパイル済み) ステートメント内のローカル変数
    • SQL ルーチンのパラメーター
    • SQL 関数の戻りタイプ
    • グローバル変数
  • カーソル・タイプを使用して定義された変数またはパラメーターは、コンパウンド SQL (コンパイル済み) ステートメントでのみ使用できます。
  • 厳密に型付けされたカーソル・タイプのある変数またはパラメーターは、select-statement の代わりに statement-name に基づくカーソル値の割り当てに使用してはなりません。
  • 関連した行タイプのあるユーザー定義カーソル・タイプは、厳密に型付けされたカーソル・タイプです。ない場合は、緩やかに型付けされたカーソル・タイプになります。

  • 例 1: どのカーソルでも使用できるカーソル・タイプを作成します。
    CREATE TYPE EMPCURSOR AS CURSOR
  • 例 2: 行データ・タイプ DEPTROW に基づいて厳密に型付けされたカーソル・タイプを作成します。
    CREATE TYPE DEPTCURSOR AS DEPTROW CURSOR