無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

CREATE OPERATOR

名前

CREATE OPERATOR -- 新しい演算子を定義する

概要

CREATE OPERATOR 

name

 (
    PROCEDURE = 

function_name


    [, LEFTARG = 

left_type

 ] [, RIGHTARG = 

right_type

 ]
    [, COMMUTATOR = 

com_op

 ] [, NEGATOR = 

neg_op

 ]
    [, RESTRICT = 

res_proc

 ] [, JOIN = 

join_proc

 ]
    [, HASHES ] [, MERGES ]
)

説明

CREATE OPERATOR は、新しい演算子 name を定義します。 演算子を定義したユーザがその所有者となります。 スキーマ名が指定されていた場合、その演算子は指定したスキーマで作成されます。 スキーマ名が指定されなかった場合、現在のスキーマで作成されます。

演算子名として使用できるのは、以下に示す文字を使った、 NAMEDATALEN -1(デフォルトでは63)文字までの文字列です。

+ - * / < > = ~ ! @ # % ^ & | ` ?

名前の選択には以下に示すいくつかの制約があります。

演算子 != は入力時に <> に変換されるので、これらの2つの名前は常に等価です。

少なくとも LEFTARG RIGHTARG のどちらかは定義しなければなりません。 二項演算子では、両方を定義しなければなりません。 右単項演算子では LEFTARG のみ、左単項演算子では RIGHTARG のみが定義されなければなりません。

function_name プロシージャは、 CREATE FUNCTION を使って事前に定義されていなければなりません。また、指定された型の正しい数の引数(1つか2つ)を受け付けるよう定義する必要があります。

他の句は省略可能な演算子最適化用の句です。 これらの意味は 項35.13 で説明されています。

演算子を作成するためには、 引数の型と戻り値の型に対する USAGE 権限と背後にある関数に対する EXECUTE 権限を持たなければなりません。 交代演算子または否定子演算子が指定された場合は、これらの演算子を所有していなければなりません。

パラメータ

name

定義される演算子の名前です。 使用できる文字は上を参照してください。 この名前は、例えば CREATE OPERATOR myschema.+ (...) のように、スキーマ修飾可能です。 修飾されていなければ、演算子は現在のスキーマで作成されます。 異なるデータ型について処理するものであれば、同じスキーマ内の2つの演算子は同じ名前を持つことができます。 これを オーバーロード と言います。

function_name

演算子を実装するために使用する関数です。

left_type

演算子の左オペランドのデータ型です(左オペランドが存在する場合のみ)。 このオプションは左単項演算子では省略されます。

right_type

演算子の右オペランドのデータ型です(右オペランドが存在する場合のみ)。 このオプションは右単項演算子では省略されます。

com_op

この演算子の交代演算子です。

neg_op

この演算子の否定子です。

res_proc

この演算子の制約選択評価関数です。

join_proc

この演算子の結合選択評価関数です。

HASHES

この演算子がハッシュ結合をサポートできることを示します。

MERGES

この演算子がマージ結合をサポートできることを示します。

スキーマ修飾された演算子名を com_op または他のオプション引数に与えるには、以下の例のように OPERATOR() 構文を使用してください。

COMMUTATOR = OPERATOR(myschema.===) ,

注釈

詳細については 項35.12 を参照してください。

CREATE OPERATOR で演算子の語彙優先順位を指定することはできません。 パーサの優先順位に関する動作は固定であるためです。 詳細な優先順位については 項4.1.6 を参照してください。

廃止されたオプション SORT1 SORT2 LTCMP 、および GTCMP は、マージ結合可能演算子に関連したソート演算子の名前を指定するために使用されていました。 代わりにB-Tree演算子族を検索することで関連する演算子を見つけることができるようになりましたので、これは必要がなくなりました。 これらの内のいずれかのオプションが指定された場合、暗黙的に MERGES を真に指定している場合を除き、無視されます。

データベースからユーザ定義の演算子を削除するには DROP OPERATOR を使用してください。 データベース内の演算子を変更するには ALTER OPERATOR を使用してください。

以下のコマンドは、 box データ型に対する領域等価性を判定する新しい演算子を定義します。

CREATE OPERATOR === (
    LEFTARG = box,
    RIGHTARG = box,
    PROCEDURE = area_equal_procedure,
    COMMUTATOR = ===,
    NEGATOR = !==,
    RESTRICT = area_restriction_procedure,
    JOIN = area_join_procedure,
    HASHES, MERGES
);

互換性

CREATE OPERATOR PostgreSQL の拡張です。 標準SQLには、ユーザ定義の演算子についての規定はありません。

関連項目

ALTER OPERATOR , CREATE OPERATOR CLASS , DROP OPERATOR

powered by SEO.CUG.NET