用途
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;