CREATE OPERATOR

目的

CREATE OPERATOR文を使用すると、新しい演算子を作成し、バインディングを定義できます。

演算子は、索引タイプ、SQL問合せおよびDML文で参照できます。それに対して演算子は、ファンクション、パッケージ、型および他のユーザー定義オブジェクトを参照します。

関連項目:

これらの依存性および演算子の概要は、『Oracle Databaseデータ・カートリッジ開発者ガイド』および『Oracle Database概要』を参照してください。

前提条件

自分のスキーマ内に演算子を作成する場合は、CREATE OPERATORシステム権限が必要です。他のユーザーのスキーマ内に演算子を作成する場合は、CREATE ANY OPERATORシステム権限が必要です。どちらの場合も、参照するファンクションおよび演算子に対するEXECUTEオブジェクト権限が必要です。

構文

create_operator::=

binding_clause::=

implementation_clause::=

context_clause::=

using_function_clause::=

セマンティクス

OR REPLACE

OR REPLACEを指定すると、演算子スキーマ・オブジェクトの定義を置換できます。

演算子の置換の制限事項

演算子に対して、その演算子をサポートする索引タイプなどの依存オブジェクトがない場合のみ、定義を置換できます。

schema

演算子が含まれているスキーマを指定します。schemaを省略した場合、自分のスキーマ内に演算子が作成されます。

operator

作成する演算子の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

binding_clause

binding_clauseを使用すると、演算子をファンクションにバインドするために、1つ以上のパラメータ・データ型(parameter_type)を指定できます。各バインドのシグネチャ(対応するファンクションに対する引数のデータ型の順序)は、オーバーロードの規則に従って一意である必要があります。

parameter_type自体をオブジェクト型にできます。この場合、任意にスキーマで修飾することもできます。

演算子のバインドの制限事項

REFLONGまたはLONG RAWparameter_typeは指定できません。

関連項目:

オーバーロードの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

RETURN句

バインドに戻りデータ型を指定します。

return_type自体をオブジェクト型にできます。この場合、任意にスキーマで修飾することもできます。

戻りデータ型のバインドの制限事項

REFLONGまたはLONG RAWreturn_typeは指定できません。

SHARING

SHARING句は、アプリケーションのメンテナンスの際に、アプリケーション・ルートにオブジェクトを作成する場合に使用します。このタイプのオブジェクトはアプリケーション共通オブジェクトと呼ばれ、アプリケーション・ルートに属するアプリケーションPDBと共有できます。

次の共有属性のいずれかを使用して、オブジェクトを共有する方法を指定できます。

  • METADATA - メタデータ・リンクはメタデータを共有しますが、そのデータは各コンテナに固有です。このタイプのオブジェクトは、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。

  • NONE - オブジェクトは共有されず、アプリケーション・ルートでのみアクセスできます。

implementation_clause

この句を使用すると、バインドの実装を指定できます。

ANCILLARY TO句

ANCILLARY TO句を使用すると、演算子バインドが、指定した主演算子バインド(primary_operator)を補助することを指定できます。この句を指定する場合は、1つのみの数値パラメータで前のバインドを指定しないでください。

context_clause

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;