14.24 要素の仕様
要素の仕様でADTの各属性を指定します。
要素の仕様は、次のSQL文に指定できます。
構文
element_spec ::=
( subprogram_spec ::= , constructor_spec ::=, map_order_function_spec ::=, restrict_references_pragma ::=)
inheritance_clauses ::=
function_spec ::=
セマンティクス
element_spec
inheritance_clauses
スーパータイプとサブタイプの間の関係を指定します。
[NOT] OVERRIDING
スーパータイプで定義されているMEMBER
メソッドがこのメソッドによってオーバーライドされるように指定します。このキーワードは、このメソッドでスーパータイプのメソッドを再定義する場合には必須です。デフォルト: NOT
OVERRIDING
。
[NOT] FINAL
このメソッドがこの型のサブタイプによってオーバーライドされないように指定します。デフォルト: NOT
FINAL
。
[NOT] INSTANTIABLE
このメソッドが型で実装されないように指定します。デフォルト: すべてのメソッドがINSTANTIABLE
です。
NOT INSTANTIABLEの制限
NOT
INSTANTIABLE
を指定した場合は、FINAL
もSTATIC
も指定できません。
関連項目:
subprogram_spec
ADT属性として参照されるサブプログラムを指定します。このようなサブプログラムには、それぞれの対応するメソッド本体をADT本体に指定する必要があります。
subprogram_specの制限
MEMBER
メソッドをサブタイプ内で再定義するサブタイプに対してSTATIC
メソッドを定義することはできません。逆も同様です。
MEMBER
属性として参照されるADTに関連付けられたサブプログラム。通常、object_expression.method
()
などの自己参照的スタイルでMEMBER
メソッドを起動します。このクラスのメソッドには、メソッド本体でSELF
として参照される暗黙的な最初の引数があり、この引数は、メソッドが起動されるオブジェクトを表します。
関連項目:
STATIC
ADTに関連付けられたサブプログラムです。MEMBER
メソッドとは異なり、STATIC
メソッドに暗黙的なパラメータはありません。本体でSELF
を参照することはできません。通常、type_name.method
()
として起動されます。
STATICの制限
-
Javaクラスの
MEMBER
メソッドをSQLJオブジェクト型のSTATIC
メソッドにマップすることはできません。 -
MEMBER
メソッドの場合も、STATIC
メソッドの場合も、プロシージャの仕様部またはファンクションの仕様部に対応するメソッド本体を型本体に指定する必要があります。
関連項目:
procedure_specまたはfunction_spec
プロシージャまたはファンクションのパラメータおよびデータ型を指定します。このサブプログラムにプロシージャまたはファンクションの宣言が含まれていない場合は、対応するCREATE
TYPE
BODY
文を発行する必要があります。
procedure_specまたはfunction_specの制限
サブタイプを作成する場合、プロシージャまたはファンクションの名前は、継承された属性かどうかに関係なく、連鎖するスーパータイプで宣言されているどの属性とも同じ名前にできません。
return_clause
return_clauseの最初の形式はファンクションでのみ有効です。示されている構文は、省略形です。
関連項目:
メソッドおよびメソッドの起動の詳細は、「コレクション・メソッドの起動」を参照してください
constructor_spec
ADTの初期化インスタンスを戻すファンクションであるユーザー定義コンストラクタを作成します。各コンストラクタのパラメータの数、順序またはデータ型が異なる場合は、1つのADTに対して複数のコンストラクタを宣言できます。
-
ユーザー定義コンストラクタ・ファンクションは常に
FINAL
およびINSTANTIABLE
であるため、これらのキーワードはオプションです。 -
ユーザー定義コンストラクタのパラメータの引渡しモードは常に
SELF
IN
OUT
です。そのため、意味を明確にするために指定する場合を除き、この句を指定する必要はありません。 -
RETURN
SELF
AS
RESULT
は、コンストラクタによって戻される値の実行時型が、SELF
引数の実行時型になるように指定します。
関連項目:
ユーザー定義コンストラクタの詳細および例は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』および「例15-32」を参照してください
map_order_function_spec
宣言するMEMBER
またはSTATIC
メソッドの数に関係なく、型仕様部には、1つのMAP
メソッドまたは1つのORDER
メソッドを宣言できます。いずれかのメソッドを宣言すると、SQLでオブジェクト・インスタンスを比較できます。
いずれのメソッドも宣言しない場合、オブジェクト・インスタンスに関して比較できるのは等しいか等しくないかについてのみです。同じ型定義のインスタンスは、それぞれの対応する属性の各ペアが等しい場合にのみ等しくなります。2つのADTが等しいかどうかを判断するために、比較メソッドを指定しないでください。
サブタイプにはMAP
およびORDER
メソッドのいずれも宣言できません。ただし、スーパータイプでNOT
FINAL
MAP
メソッドを定義する場合は、サブタイプでMAP
メソッドをオーバーライドできます。サブタイプでは、ORDER
メソッドはオーバーライドできません。
JavaクラスからSQL型へのマップ時に、MAP
メソッドまたはORDER
メソッドのいずれかを指定できます。ただし、MAP
メソッドおよびORDER
メソッドは、JavaクラスのMEMBER
ファンクションにマップする必要があります。
MAP
メソッドもORDER
メソッドも指定されていない場合、比較できるのは等しいか等しくないかについてのみとなります。したがって、オブジェクト・インスタンスに順序を付けることはできません。同じ型定義のインスタンスは、それぞれの対応する属性の各ペアが等しい場合にのみ等しくなります。2つのADTが等しいかどうかを判断するために、比較メソッドを指定する必要はありません。
オブジェクト・インスタンスで大規模のソートまたはハッシュ結合操作を実行する場合は、MAP
メソッドを使用します。MAP
メソッドを1回適用すると、オブジェクトがスカラー値にマップされ、ソート中およびマージ中にデータベースによってそのスカラーが使用されます。MAP
メソッドは、各オブジェクトを比較するメソッドを起動する必要があるORDER
メソッドより効率的です。ハッシュ結合ではMAP
メソッドを使用する必要があります。ハッシュ・メカニズムはオブジェクト値でハッシュするため、ORDER
メソッドを使用することはできません。
関連項目:
オブジェクト値の比較の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。
MAP MEMBER
オブジェクトのすべてのインスタンスの順序における特定のインスタンスの相対的な位置を戻すMAP
メンバー・ファンクション(MAP
メソッド)を指定します。MAP
メソッドは暗黙的にコールされ、オブジェクト・インスタンスを事前定義済のスカラー型の値にマップすることによって、それらのオブジェクト・インスタンスに順序を設定します。PL/SQLでは、順序付けを使用してブール式の評価と比較を行います。
MAP
メソッドの引数がNULL
の場合は、MAP
メソッドによってNULL
が戻され、メソッドは起動されません。
オブジェクトの仕様部には1つのMAP
メソッドのみを含めることができ、このメソッドはファンクションである必要があります。結果として生成される型は、事前定義済のSQLスカラー型である必要があり、MAP
メソッドに指定できる引数は、暗黙的なSELF
引数のみです。
注意:
ソート(ORDER
BY
句、GROUP
BY
句、DISTINCT
句またはUNION
句を使用)または結合を含む問合せでtype_name
が参照される場合に、それらの問合せをパラレル化するには、MAP
メンバー・ファンクションを指定する必要があります。
サブタイプでは、新しいMAP
メソッドを定義することはできませんが、継承されたMAP
メソッドをオーバーライドすることはできます。
ORDER MEMBER
オブジェクトのインスタンスを明示的な引数および暗黙的なSELF
引数として取り、負の整数、0(ゼロ)または正の整数のいずれかを戻すORDER
メンバー・ファンクション(ORDER
メソッド)を指定します。負の整数、0(ゼロ)または正の整数は、暗黙的なSELF
引数が明示的な引数より小さいか、等しいかまたは大きいことを示します。
ORDER
メソッドのいずれかの引数がNULL
の場合は、ORDER
メソッドによってNULL
が戻され、メソッドは起動されません。
同じADT定義のインスタンスをORDER
BY
句で比較すると、ORDER
メソッド・ファンクションが起動されます。
オブジェクトの仕様部には1つのORDER
メソッドのみを含めることができ、このメソッドは戻り型NUMBER
を持つファンクションである必要があります。
サブタイプでは、ORDER
メソッドを定義およびオーバーライドすることはできません。
map_order_function_specの制限
サブタイプにORDER
メソッドを追加することはできません。
restrict_references_pragma
非推奨の句です。「RESTRICT_REFERENCESプラグマ」を参照してください。
restrict_references_pragmaの制限
この句は、メソッドを削除する場合には無効です。