日本語PDF

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 ::=

subprog_decl_in_type ::=

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引数の最も固有の型であることを示します。

関連項目:

declare_section

プロシージャまたはファンクションに対してローカルな項目を宣言します。

body

プロシージャまたはファンクションの文。

func_decl_in_type

ファンクション・サブプログラムの宣言。

型本体を作成する例は、「CREATE TYPE文」「例」を参照してください。型本体の再作成の例は、「例14-7」を参照してください。