プライマリ・コンテンツに移動
Oracle Database PL/SQL言語リファレンス
12c リリース1 (12.1)
B71296-06
目次へ移動
目次
索引へ移動
索引

前
次

CREATE TYPE BODY文

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システム権限が必要です。

構文

subprog_decl_in_type ::=

parallel_enable_cl_in_type ::=

streaming_cl_in_type ::=

constructor_declaration ::=

「call_spec ::=」を参照してください。

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

データをパラレル実行サーバー間でランダムにパーティション化できることを示します

注意:

テーブル・ファンクションの弱いカーソル変数引数をパーティション化するには、RANGEHASHVALUEではなく、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」を参照してください。