CREATE
TYPE
BODY
は、オブジェクト型の仕様部に定義されたメンバー・メソッドを定義または実装します。 CREATE
TYPE
文およびCREATE
TYPE
BODY
文を使用して、オブジェクト型を作成します。 CREATE TYPE文は、オブジェクト型の名前、オブジェクト型の属性、メソッドおよびその他のプロパティを指定します。 CREATE
TYPE
BODY
文には、型を実装するメソッドのコードが含まれています。
call_spec
を指定しなかったオブジェクト型の仕様部に指定された各メソッドに対して、対応するメソッド本体をオブジェクト型本体で指定する必要があります。
注意: SQLJオブジェクト型を作成する場合は、Javaクラスとして指定してください。 |
前提条件
オブジェクト型のCREATE
TYPE
仕様部のすべてのメンバー宣言には、対応する構成がCREATE
TYPE
文またはCREATE
TYPE
BODY
文に必要です。
自身のスキーマ内に型本体を作成するか、または自身のスキーマ内の型本体を置き換えるには、CREATE
TYPE
またはCREATE
ANY
TYPE
のシステム権限が必要です。 別のユーザーのスキーマ内にオブジェクト型を作成するには、CREATE
ANY
TYPE
システム権限が必要です。 別のユーザーのスキーマ内のオブジェクト型を置き換えるには、DROP
ANY
TYPE
システム権限が必要です。
構文
create_type_body ::=
(subprog_decl_in_type ::=、map_order_func_declaration ::=)
subprog_decl_in_type ::=
proc_decl_in_type ::=
(declare_section ::=、body ::=、call_spec ::=)
func_decl_in_type ::=
(declare_section ::=、body ::=、call_spec ::=)
constructor_declaration ::=
map_order_func_declaration ::=
call_spec ::=
Java_declaration ::=
C_declaration ::=
キーワードとパラメータの説明
OR
REPLACE
を指定すると、型本体がすでに存在する場合に再作成できます。 この句を指定すると、既存の型本体の定義を削除せずに変更できます。
再作成するオブジェクト型本体に対する権限を以前に付与されているユーザーは、権限を再度付与されなくてもそのオブジェクト型本体を使用および参照できます。
この句を使用すると、ALTER
TYPE
... REPLACE
文で追加された仕様部に、新しいメンバー・サブプログラム定義を追加できます。
schema
型本体を含めるスキーマを指定します。 schema
を省略すると、データベースによって現行のスキーマに型本体が作成されます。
type_name
オブジェクト型の名前を指定します。
subprog_decl_in_type
オブジェクト型の仕様部に関連付けられたファンクション・サブプログラムまたはプロシージャのサブプログラムの型を指定します。
プロシージャまたはファンクションの宣言ごとに、対応するメソッド名とオプション・パラメータのリストをオブジェクト型の仕様部に定義する必要があります。 ファンクションの場合は、戻り型も指定する必要があります。
proc_decl_in_type、func_decl_in_type プロシージャ・サブプログラムまたはファンクションのサブプログラムを宣言します。
constructor_declaration ユーザー定義のコンストラクタ・サブプログラムを宣言します。
コンストラクタ・ファンクションのRETURN
句は、RETURN
SELF
AS
RESULT
にする必要があります。 この設定は、コンストラクタ・ファンクションによって戻される値の最も固有の型が、コンストラクト・ファンクションに渡されたSELF
引数の最も固有の型と同じであることを示します。
参照:
|
declare_section
プロシージャまたはファンクションに対してローカルな項目を宣言します。
body
プロシージャまたはファンクションの文。
call_spec JavaまたはCのメソッド名、パラメータ型および戻り型を、対応するSQLにマップするコール仕様を指定します。
Java_declaration
文字列は、メソッドのJava実装を識別します。
参照:
|
map_order_func_declaration
宣言するMEMBER
またはSTATIC
メソッドの数に関係なく、1つのMAP
メソッドまたは1つのORDER
メソッドを宣言できます。 MAP
またはORDER
メソッドを宣言すると、オブジェクト・インスタンスをSQLで比較できます。
いずれのメソッドも宣言しない場合、オブジェクト・インスタンスに関して比較できるのは等しいか等しくないかについてのみです。 同じ型定義のインスタンスは、それぞれの対応する属性の各ペアが等しい場合にのみ等しくなります。
MAP
MEMBER
を指定すると、オブジェクトのすべてのインスタンスの順序付けにおける任意のインスタンスの相対的な位置を戻すMAP
メンバー・ファンクションを宣言または実装できます。 MAP
メソッドは暗黙的にコールされ、事前定義済のスカラー型の値にマップすることによって、オブジェクト・インスタンスの順序を指定します。 PL/SQLでは、順序付けを使用してブール式の評価と比較を行います。
MAP
メソッドの引数がNULLの場合は、MAP
メソッドによってNULLが戻され、メソッドは起動されません。
オブジェクト型本体には1つのMAP
メソッドのみを含めることができ、このメソッドはファンクションである必要があります。 MAP
ファンクションに指定できる引数は、暗黙的なSELF
引数以外のみです。
ORDER
MEMBER
を指定すると、オブジェクトのインスタンスを明示的な引数および暗黙的なSELF
引数として取り、負の整数、0(ゼロ)または正の整数のいずれかを戻すORDER
メンバー・ファンクションを指定できます。戻される値は、暗黙的なSELF
引数が明示的な引数より小さいか、等しいかまたは大きいことをそれぞれ示します。
ORDER
メソッドのいずれかの引数がNULLの場合は、ORDER
メソッドによってNULLが戻され、メソッドは起動されません。
同じオブジェクト型定義のインスタンスをORDER
BY
句で比較すると、データベースによってORDER
MEMBER
func_decl_in_type
が起動されます。
オブジェクトの仕様部には1つのORDER
メソッドのみを含めることができ、このメソッドは戻り型NUMBER
を持つファンクションである必要があります。
func_decl_in_type ファンクション・サブプログラムを宣言します。 使用可能なすべての句を含む完全な構文は、「CREATE PROCEDURE文」および「CREATE FUNCTION文」を参照してください。
AS EXTERNAL AS
EXTERNAL
は、Cメソッドを宣言する場合の代替方法です。 この句は非推奨となっており、下位互換性のためにのみサポートされています。 call_spec
構文はC_declaration
とともに使用することをお薦めします。
型本体を作成する例は、「CREATE TYPE文」の「例」を参照してください。 型本体を再作成する例は、「メンバー・ファンクションの追加: 例」を参照してください。
関連トピック