CREATE TYPE
目的
オブジェクト型はPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
CREATE
TYPE
文を使用すると、オブジェクト型、SQLJオブジェクト型、名前付きの可変配列(VARRAY)、ネストした表型または不完全なオブジェクト型の仕様部を作成できます。CREATE
TYPE
文およびCREATE
TYPE
BODY
文を使用してオブジェクト型を作成します。CREATE
TYPE
文では、オブジェクト型の名前、オブジェクトの属性、メソッドおよびその他のプロパティを指定します。CREATE
TYPE
BODY
文には、その型を実装するメソッドに対するコードが含まれます。
ノート:
-
型仕様で属性のみ宣言し、メソッドは宣言しないオブジェクト型を作成する場合は、型本体を指定する必要はありません。
-
SQLJオブジェクト型を作成する場合は、型本体を指定できません。型の実装はJavaクラスとして指定されます。
不完全型とは、フォワード型定義によって作成される型です。このオブジェクト型には名前はありますが、属性およびメソッドがないため、不完全といわれます。他の型からの参照が可能なため、互いに参照する型の定義に使用できます。ただし、不完全オブジェクト型を使用して表やオブジェクト列またはネストした表型の列を作成する場合は、型を完全に指定しておく必要があります。
関連項目:
-
型のメンバー・メソッドの作成については、「CREATE TYPE BODY」を参照してください。
-
オブジェクト、不完全型、VARRAYおよびネストした表の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。
前提条件
自分のスキーマ内に型を作成する場合は、CREATE
TYPE
システム権限が必要です。他のユーザーのスキーマ内に型を作成する場合は、CREATE
ANY
TYPE
システム権限が必要です。これらの権限は、明示的に取得することもロールを介して取得することもできます。
サブタイプを作成するには、UNDER
ANY
TYPE
システム権限またはスーパータイプに対するUNDER
オブジェクト権限が必要です。
型の所有者には、型定義内で参照する他のすべての型にアクセスするためのEXECUTE
オブジェクト権限が明示的に付与されている必要があります。または、EXECUTE
ANY
TYPE
システム権限が付与されている必要があります。所有者は、これらの権限をロールを介して取得することはできません。
型の所有者が、型にアクセスする権限を他のユーザーに付与する場合、所有者には、参照型に対するGRANT
OPTION
付きのEXECUTE
オブジェクト権限、またはADMIN
OPTION
付きのEXECUTE
ANY
TYPE
システム権限が必要です。これらの権限がない場合、型の所有者は、型にアクセスする権限を他のユーザーに付与できません。
永続不可のデータ型として宣言されるユーザー定義のデータ型
データ型の作成時に、ユーザー定義のデータ型を永続不可として指定できます。永続不可型のインスタンスは、ディスク上で保持することはできません。永続可能なデータ型は次のとおりです。
-
ANSI対応データ型(
NUMERIC
、DECIMAL
、REAL
など)。 -
Oracleの組込みデータ型(
NUMBER
、VARCHAR2
、TIMESTAMP
など)。 -
Oracleが提供するデータ型(
ANYDATA
、XML Type
、ORDImage
など)。
SQLユーザー定義データ型のルール
-
永続可能な型には、永続不可の型の属性または要素を指定できません。
-
永続不可の型には、永続可能な型と永続不可の型の両方の属性または要素を指定できます。
-
サブタイプは、そのスーパータイプから永続プロパティを継承する必要があります。
-
REF
型は永続可能であり、永続可能な型のオブジェクトへの参照のみを保持できます。 -
永続不可の型のインスタンスをディスク上で保持することはできません。永続不可として宣言された型を使用して表を作成する場合、
CREATE TABLE
文は失敗します。同様に次の操作は失敗します。-
永続不可の型の列を含むリレーショナル表を作成または変更する。
-
永続不可の型の列を含むオブジェクト表を作成する。
-
ディスク上で保持されている
ANYDATA
インスタンスに、永続不可の型のインスタンスを格納する。
-
PL/SQLコンテキストのCREATE TYPE
文でのみ一意のPL/SQL属性を指定できます。
構文
型はPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。
create_type::=
(plsql_type_source
については、『Oracle Database PL/SQL言語リファレンス』を参照してください。)
セマンティクス
OR REPLACE
OR
REPLACE
を指定すると、既存の型を再作成できます。この句を指定した場合、既存の型の定義をはじめに削除しなくても、その定義を変更できます。
再作成するオブジェクト型に対する権限があらかじめ付与されている場合は、再作成後にあらためて権限を付与されなくてもそのオブジェクト型を使用および参照できます。
ファンクション索引が型に依存している場合、索引にDISABLED
のマークが付きます。
IF NOT EXISTS
IF NOT EXISTS
を指定すると、次の効果が得られます。
-
型が存在していない場合は、文の最後に新しい型が作成されます。
-
型が存在している場合、これは文の最後の時点にある型になります。古いものが検出されるため、新しいものは作成されません。
単一の文には、一度に1つのOR REPLACE
またはIF NOT EXISTS
を指定できます。同じ文でOR REPLACE
とIF NOT EXISTS
の両方を使用すると、ORA-11541: REPLACE and IF NOT EXISTS cannot coexist in the same DDL statement
というエラーが発生します。
IF EXISTS
はCREATE
とともに使用すると、ORA-11543: Incorrect IF NOT EXISTS clause for CREATE statement
が発生します。
[ EDITIONABLE | NONEDITIONABLE ]
この句を使用すると、schema
のスキーマ・オブジェクト・タイプTYPE
のエディショニングが有効化されたときに、その型をエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトはEDITIONABLE
です。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。
plsql_type_source
plsql_type_source
の構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。