CREATE
TYPE
BODY
は、「CREATE TYPE文」で作成された型の仕様部に定義されたメンバー・メソッドを定義または実装します。
call_spec
を指定しなかった型の仕様部に指定された各メソッドに対して、対応するメソッド本体を型本体で指定する必要があります。
注意:
SQLJオブジェクト型を作成する場合は、Javaクラスとして指定してください。
ここでのトピック
前提条件
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 ::=
参照:
func_decl_in_type ::=
参照:
parallel_enable_cl_in_type ::=
streaming_cl_in_type ::=
map_order_func_declaration ::=
セマンティクス
create_type_body
OR REPLACE
型本体が存在する場合は、型本体を再作成し、再コンパイルします。
再定義する前の型本体に対する権限を付与されていたユーザーは、権限を再付与される必要なく、型本体にアクセスできます。
この句を使用すると、ALTER
TYPE
... REPLACE
文で追加された仕様部に、メンバー・サブプログラム定義を追加できます。
[ EDITIONABLE | NONEDITIONABLE ]
このプロパティを指定しないと、型本体は型仕様部からEDITIONABLE
またはNONEDITIONABLE
を継承します。このプロパティを指定する場合は、型仕様部のプロパティと一致する必要があります。
plsql_type_body
schema
型本体が含まれているスキーマの名前。デフォルト: 自分のスキーマ。
type_name
ADTの名前。
subprog_decl_in_type
型の仕様部に関連付けられたファンクション・サブプログラムまたはプロシージャ・サブプログラムの型。
プロシージャまたはファンクションの宣言ごとに、対応するメソッド名とオプション・パラメータのリストを型の仕様部に定義する必要があります。ファンクションの場合は、戻り型も指定する必要があります。
proc_decl_in_type、func_decl_in_type
プロシージャ・サブプログラムまたはファンクション・サブプログラムの宣言。
parallel_enable_cl_in_type
パラレル問合せ操作のパラレル実行サーバーからファンクションを実行できることを示します。このファンクションでは、パッケージ変数などのセッション状態は使用しないでください(このような変数がパラレル実行サーバー間で共有されているとはかぎらないためです)。parallel_enable_cl_in_type
はファンクション内で1回のみ使用できます。
オプションのPARTITION
argument
BY
句は、REF
CURSOR
データ型のファンクションでのみ使用します。この句を使用すると、REF
CURSOR
引数からファンクションへの入力のパーティション化を定義できます。ファンクションへの入力のパーティション化は、ファンクションが問合せのFROM
句内のテーブル・ファンクションとして使用された場合の問合せのパラレル化の方法に影響します。
ANY
データをパラレル実行サーバー間でランダムにパーティション化できることを示します
注意:
テーブル・ファンクションの弱いカーソル変数引数をパーティション化するには、RANGE
、HASH
やVALUE
ではなく、ANY
のみを使用します。
RANGEまたはHASH
ファンクションのREF
CURSOR
引数によって戻される指定済の列にデータをパーティション化します。
オプションのstreaming_cl_in_type
を使用すると、パラレル処理を順序付けまたはクラスタ化できます。
ORDER
BY
またはCLUSTER
BY
は、パラレル実行サーバー上の行はローカルに順序付けし、column
リストで指定されたキー値と同じキー値を持つことが必要であることを示します。
expr
は、パーティション化が指定されているテーブル・ファンクション、およびパラレル問合せの実行時に各スレーブの順序付けまたはクラスタ化を指定する列を持つテーブル・ファンクションのREF
CURSOR
パラメータの名前を示します。
VALUE
ダイレクト・キー・パーティション化を指定します。これは、MapReduceワークロードを実行する際に使用するテーブル・ファンクション用です。column
は、データ型がNUMBER
である必要があります。VALUE
は、使用可能なリデューサに行処理を均等に分散します。
列内に使用可能なリデューサよりも多くのリデューサがある場合、PL/SQLでは、モジュロ演算を使用して、列内のリデューサ数を正しい範囲にマップします。
リデューサ数を計算して対応する行を処理する際に、PL/SQLでは、負の値が0(ゼロ)として処理され、正の小数値が最も近い整数に丸められます。
関連項目:
パラレル・テーブル・ファンクションを使用する方法の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。
constructor_declaration
ユーザー定義のコンストラクタ・サブプログラムの宣言。コンストラクタ・ファンクションのRETURN
句は、RETURN
SELF
AS
RESULT
にする必要があります。この設定は、コンストラクタ・ファンクションによって戻される値の最も固有の型が、コンストラクタ・ファンクションに渡されたSELF
引数の最も固有の型であることを示します。
関連項目:
ユーザー定義のファンクションの制限のリストは、「CREATE TYPE文」を参照してください
パッケージ内のサブプログラム名のオーバーロードの詳細は、「オーバーロードされたサブプログラム」を参照してください
ユーザー定義のコンストラクタの詳細と例については、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。
declare_section
プロシージャまたはファンクションに対してローカルな項目を宣言します。
body
プロシージャまたはファンクションの文。
call_spec、EXTERNAL
「call_spec」および「EXTERNAL」を参照してください。
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
を持つファンクションである必要があります。
func_decl_in_type
ファンクション・サブプログラムの宣言。使用可能なすべての句を含む完全な構文は、「CREATE PROCEDURE文」および「CREATE FUNCTION文」を参照してください。
EXTERNAL
下位互換性のためにのみサポートされている、Cメソッドの非推奨の宣言方法。LANGUAGE
C
構文を使用することをお薦めします。
例
型本体を作成する例は、「CREATE TYPE文」の「例」を参照してください。型本体の再作成の例は、「例14-5」を参照してください。