14.14 CREATE TYPE BODY文
CREATE
TYPE
BODY
は、CREATE
TYPE
文で作成された型の仕様部に定義されたメンバー・メソッドを定義または実装します。
call_spec
を指定しなかった型の仕様部に指定された各メソッドに対して、対応するメソッド本体を型本体で指定する必要があります。
ここでのトピック
前提条件
ADTのCREATE
TYPE
仕様部のすべてのメンバー宣言には、対応する構成がCREATE
TYPE
文またはCREATE
TYPE
BODY
文に必要です。
自分のスキーマ内に型本体を作成するか、または自分のスキーマ内の型本体を置き換えるには、CREATE
TYPE
またはCREATE
ANY
TYPE
のシステム権限が必要です。他のユーザーのスキーマ内に型を作成する場合は、CREATE
ANY
TYPE
システム権限が必要です。別のユーザーのスキーマ内の型を置き換えるには、DROP
ANY
TYPE
システム権限が必要です。
構文
create_type_body ::=
plsql_type_body_source ::=
subprog_decl_in_type ::=
proc_decl_in_type ::=
(body ::=、call_spec ::=、declare_section ::=、parameter_declaration ::=)
func_decl_in_type ::=
(body ::=、invoker_rights_clause ::=、accessible_by_clause ::=、deterministic_clause ::=、call_spec ::=、declare_section ::=、parameter_declaration ::=、parallel_enable_clause ::=、result_cache_clause ::=、pipelined_clause ::=)
map_order_func_declaration ::=
セマンティクス
create_type_body
OR REPLACE
型本体が存在する場合は、型本体を再作成し、再コンパイルします。
再定義する前の型本体に対する権限を付与されていたユーザーは、権限を再付与される必要なく、型本体にアクセスできます。
この句を使用すると、ALTER
TYPE
... REPLACE
文で追加された仕様部に、メンバー・サブプログラム定義を追加できます。
[ EDITIONABLE | NONEDITIONABLE ]
このプロパティを指定しないと、型本体は型仕様部からEDITIONABLE
またはNONEDITIONABLE
を継承します。このプロパティを指定する場合は、型仕様部のプロパティと一致する必要があります。
plsql_type_body_source
schema
型本体が含まれているスキーマの名前。デフォルト: 自分のスキーマ。
type_name
ADTの名前。
subprog_decl_in_type
型の仕様部に関連付けられたファンクション・サブプログラムまたはプロシージャ・サブプログラムの型。
プロシージャまたはファンクションの宣言ごとに、対応するメソッド名とオプション・パラメータのリストを型の仕様部に定義する必要があります。ファンクションの場合は、戻り型も指定する必要があります。
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が戻され、メソッドは起動されません。
同じADT定義のインスタンスをORDER
BY
句で比較すると、データベースによってORDER
MEMBER
func_decl_in_type
が起動されます。
オブジェクトの仕様部には1つのORDER
メソッドのみを含めることができ、このメソッドは戻り型NUMBER
を持つファンクションである必要があります。
proc_decl_in_type
プロシージャ・サブプログラムの宣言。
constructor_declaration
ユーザー定義のコンストラクタ・サブプログラムの宣言。コンストラクタ・ファンクションのRETURN
句は、RETURN
SELF
AS
RESULT
にする必要があります。この設定は、コンストラクタ・ファンクションによって戻される値の最も固有の型が、コンストラクタ・ファンクションに渡されたSELF
引数の最も固有の型であることを示します。
関連項目:
-
ユーザー定義のファンクションの制限のリストは、「CREATE TYPE文」を参照してください
-
パッケージ内のサブプログラム名のオーバーロードの詳細は、「オーバーロードされたサブプログラム」を参照してください
-
ユーザー定義のコンストラクタの詳細と例については、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。
declare_section
プロシージャまたはファンクションに対してローカルな項目を宣言します。
body
プロシージャまたはファンクションの文。
func_decl_in_type
ファンクション・サブプログラムの宣言。
例
型本体を作成する例は、「CREATE TYPE文」の「例」を参照してください。型本体の再作成の例は、「例14-7」を参照してください。