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文」の「例」を参照してください。 型本体を再作成する例は、「メンバー・ファンクションの追加: 例」を参照してください。
関連トピック