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システム権限が必要です。他のユーザーのスキーマ内に型を作成する場合は、CREATE ANY TYPEシステム権限が必要です。これらの権限は、明示的に取得することもロールを介して取得することもできます。

サブタイプを作成するには、UNDER ANY TYPEシステム権限またはスーパータイプに対するUNDERオブジェクト権限が必要です。

型の所有者には、型定義内で参照する他のすべての型にアクセスするためのEXECUTEオブジェクト権限が明示的に付与されている必要があります。または、EXECUTE ANY TYPEシステム権限が付与されている必要があります。所有者は、これらの権限をロールを介して取得することはできません。

型の所有者が、型にアクセスする権限を他のユーザーに付与する場合、所有者には、参照型に対するGRANT OPTION付きのEXECUTEオブジェクト権限、またはADMIN OPTION付きのEXECUTE ANY TYPEシステム権限が必要です。これらの権限がない場合、型の所有者は、型にアクセスする権限を他のユーザーに付与できません。

永続不可のデータ型として宣言されるユーザー定義のデータ型

データ型の作成時に、ユーザー定義のデータ型を永続不可として指定できます。永続不可型のインスタンスは、ディスク上で保持することはできません。永続可能なデータ型は次のとおりです。

  • ANSI対応データ型(NUMERICDECIMALREALなど)。

  • Oracleの組込みデータ型(NUMBERVARCHAR2TIMESTAMPなど)。

  • Oracleが提供するデータ型(ANYDATAXML TypeORDImageなど)。

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のマークが付きます。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプTYPEのエディショニングが有効化されたときに、その型をエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトはEDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

plsql_type_source

plsql_type_sourceの構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。