用途
CREATE OPERATOR文を使用すると、新しい演算子を作成し、バインディングを定義できます。
演算子は、索引タイプ、SQL問合せおよびDML文で参照できます。それに対して演算子は、ファンクション、パッケージ、型および他のユーザー定義オブジェクトを参照します。
|
関連項目: これらの依存性および演算子の概要は、『Oracle Databaseデータ・カートリッジ開発者ガイド』および『Oracle Database概要』を参照してください。 |
前提条件
自分のスキーマ内に演算子を作成する場合は、CREATE OPERATORシステム権限が必要です。他のユーザーのスキーマ内に演算子を作成する場合は、CREATE ANY OPERATORシステム権限が必要です。どちらの場合も、参照するファンクションおよび演算子に対するEXECUTEオブジェクト権限が必要です。
構文
create_operator::=





セマンティクス
OR REPLACE
OR REPLACEを指定すると、演算子スキーマ・オブジェクトの定義を置換できます。
演算子の置換の制限事項: 演算子をサポートする索引タイプなどの依存オブジェクトが演算子にない場合のみ、定義を置換できます。
schema
演算子が含まれているスキーマを指定します。schemaを省略した場合、自分のスキーマ内に演算子が作成されます。
operator
作成する演算子の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。
binding_clauseを使用すると、演算子をファンクションにバインドするために、1つ以上のパラメータ・データ型(parameter_type)を指定できます。各バインドのシグネチャ(対応するファンクションに対する引数のデータ型の順序)は、オーバーロードの規則に従って一意である必要があります。
parameter_type自体をオブジェクト型にできます。この場合、任意にスキーマで修飾することもできます。
演算子のバインドの制限事項: REF、LONGまたはLONG RAWはparameter_typeに指定できません。
|
関連項目: オーバーロードの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 |
バインドに戻りデータ型を指定します。
return_type自体をオブジェクト型にできます。この場合、任意にスキーマで修飾することもできます。
戻りデータ型のバインドの制限事項: REF、LONGまたはLONG RAWはreturn_typeに対して指定できません。
この句を使用すると、バインドの実装を指定できます。
ANCILLARY TO句
ANCILLARY TO句を使用すると、演算子バインドが、指定した主演算子バインド(primary_operator)を補助することを指定できます。この句を指定する場合は、1つのみの数値パラメータで前のバインドを指定しないでください。
context_clauseを使用すると、主演算子バインドを補助しないバインドのファンクション実装を指定できます。
WITH INDEX CONTEXT、SCAN CONTEXT この句を使用すると、演算子のファンクション評価に、実装タイプで指定した索引およびスキャン・コンテキストが使用されるように指定できます。
COMPUTE ANCILLARY DATA COMPUTE ANCILLARY DATAを指定すると、演算子バインディングが補助データを計算するように指定できます。
WITH COLUMN CONTEXT WITH COLUMN CONTEXTを指定すると、列情報が演算子のファンクション実装に渡されるように指定できます。
この句を指定する場合は、実装するファンクションのシグネチャに、余分なODCIFuncCallInfo構造を1つ含める必要があります。
|
関連項目: ODCIFuncCallInfoルーチンを使用する手順については、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。 |
using_function_clause
using_function_clauseを使用すると、バインディングを実装するファンクションを指定できます。function_nameには、スタンドアロン・ファンクション、パッケージ・ファンクション、型メソッドまたはこれらのシノニムを指定できます。
ファンクションが後で削除された場合は、演算子などのすべての依存オブジェクトに、INVALIDのマークが付けられます。ただし、その後ALTER OPERATOR ... DROP BINDING文を発行してバインディングを削除した場合は、後続の問合せおよびDMLで依存オブジェクトが再検証されます。
例
ユーザー定義演算子の作成例: 次の文は、非常に単純な等価性のファンクション実装を作成した後、このファンクションを使用する演算子を作成します。より詳細な例については、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。
CREATE FUNCTION eq_f(a VARCHAR2, b VARCHAR2) RETURN NUMBER AS BEGIN IF a = b THEN RETURN 1; ELSE RETURN 0; END IF; END; / CREATE OPERATOR eq_op BINDING (VARCHAR2, VARCHAR2) RETURN NUMBER USING eq_f;