.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "CREATE OPERATOR" "" "2004-06-19" "SQL - 言語" "SQL コマンド"
.SH NAME
CREATE OPERATOR \- 新しい演算子の定義

.SH SYNOPSIS
.sp
.nf
CREATE OPERATOR \fIname\fR (
    PROCEDURE = \fIfuncname\fR
    [, LEFTARG = \fIlefttype\fR ] [, RIGHTARG = \fIrighttype\fR ]
    [, COMMUTATOR = \fIcom_op\fR ] [, NEGATOR = \fIneg_op\fR ]
    [, RESTRICT = \fIres_proc\fR ] [, JOIN = \fIjoin_proc\fR ]
    [, HASHES ] [, MERGES ]
    [, SORT1 = \fIleft_sort_op\fR ] [, SORT2 = \fIright_sort_op\fR ]
    [, LTCMP = \fIless_than_op\fR ] [, GTCMP = \fIgreater_than_op\fR ]
)
.sp
.fi
.SH "説明"
.PP
\fBCREATE OPERATOR\fRは、新しい演算子 \fIname\fRを定義します。演算子を定義したユーザがその所有者となります。
スキーマ名が指定されていた場合、その演算子は指定したスキーマで作成されます。
さもなくば、現在のスキーマで作成されます。
.PP
演算子名は、以下に示す文字で、\fBNAMEDATALEN\fR-1（デフォルトでは63）文字数までの文字列です。
.sp
.nf
+ - * / < > = ~ ! @ # % ^ & | ` ?
.sp
.fi
名前の選択には以下に示すいくつかの制約があります。
.TP 0.2i
\(bu
--と/*は演算子名のどこにも使うことができません。 
コメントの開始とみなされてしまうからです。
.TP 0.2i
\(bu
複数文字の演算子名は、下記のうちの1つ以上を含まない限り+または-で終わることができません。
.sp
.nf
~ ! @ # % ^ & | ` ?
.sp
.fi
たとえば、@-は演算子名として許されますが、*-は許されません。
この制約により、PostgreSQLがSQLに準拠する問い合わせをトークン同士の間にスペースを要求することなしに解析することが可能になります。
.PP
.PP
演算子!=は入力時に<>に写像されるので、これらの2つの名前は常に等価です。
.PP
少なくとも LEFTARG と RIGHTARG のどちらかは定義されなければなりません。
二項演算子では両方が定義されなければなりません。 
右単項演算子では LEFTARG のみが定義されなければならず、左単項演算子では RIGHTARG のみが定義されなければなりません。
.PP
\fIfuncname\fRプロシージャは、\fBCREATE FUNCTION\fRを使って事前に定義されていなければならず、指定された型の正しい数の引数（1つか2つ）を受け付けるように定義されていなければなりません。
.PP
他の句は省略可能な演算子最適化用の句です。
これらの意味は[XRef to XOPER]で説明されています。
.SH "パラメータ"
.TP
\fB\fIname\fB\fR
定義される演算子です。
使用できる文字は上を参照してください。 
この名前は、スキーマで修飾されている場合があります。例 CREATE OPERATOR myschema.+ (...)
修飾されていなければ、演算子は現在のスキーマで作成されます。
異なるデータ型について処理するものであれば、同じスキーマ内の2つの演算子は同じ名前を持つことができます。
これは\fIオーバーロード\fRといいます。
.TP
\fB\fIfuncname\fB\fR
演算子を実装するために使用される関数です。
.TP
\fB\fIlefttype\fB\fR
もしある場合は、演算子の左辺の引数の型です。
このオプションは左単項演算子では省略されます。
.TP
\fB\fIrighttype\fB\fR
もしある場合は、演算子の右辺の引数の型です。
このオプションは右単項演算子では省略されます。
.TP
\fB\fIcom_op\fB\fR
この演算子の交代演算子です。
.TP
\fB\fIneg_op\fB\fR
この演算子の否定子です。
.TP
\fB\fIres_proc\fB\fR
この演算子の制約選択評価関数です。
.TP
\fB\fIjoin_proc\fB\fR
この演算子の結合選択評価関数です。
.TP
\fBHASHES\fR
この演算子がハッシュ結合をサポートできることを示します。
.TP
\fBMERGES\fR
この演算子がマージ結合をサポートできることを示します。
.TP
\fB\fIleft_sort_op\fB\fR
この演算子がマージ結合をサポートできる場合、この演算子の左辺データ型をソートする小なり演算子です。
.TP
\fB\fIright_sort_op\fB\fR
この演算子がマージ結合をサポートできる場合、この演算子の右辺データ型をソートする小なり演算子です。
.TP
\fB\fIless_than_op\fB\fR
この演算子がマージ結合をサポートできる場合、この演算子の入力データ型を比較する小なり演算子です。
.TP
\fB\fIgreater_than_op\fB\fR
この演算子がマージ結合をサポートできる場合、この演算子の入力データ型を比較する大なり演算子です。
.PP
スキーマ修飾された演算子名を \fIcom_op\fR または他のオプション引数に与えるには、以下の例のように OPERATOR() 構文を使用してください。
.sp
.nf
COMMUTATOR = OPERATOR(myschema.===) ,
.sp
.fi
.PP
.SH "注釈"
.PP
詳細については [XRef to XOPER] を参照してください。
.PP
データベースからユーザ定義の演算子を削除するには、\fBDROP OPERATOR\fR を使用してください。
.SH "例"
.PP
以下のコマンドは、\fBbox\fRデータ型に対する領域等価性を判定する新しい演算子を定義します。
.sp
.nf
CREATE OPERATOR === (
    LEFTARG = box,
    RIGHTARG = box,
    PROCEDURE = area_equal_procedure,
    COMMUTATOR = ===,
    NEGATOR = !==,
    RESTRICT = area_restriction_procedure,
    JOIN = area_join_procedure,
    HASHES,
    SORT1 = <<<,
    SORT2 = <<<
   -- ソート演算子が与えられているため、MERGES が暗黙指定されています。
   -- LTCMP および GTCMP は、それぞれ < および > とみなされます。

);
.sp
.fi
.SH "互換性"
.PP
\fBCREATE OPERATOR\fRはPostgreSQL の拡張です。
標準SQLには、ユーザ定義の演算子についての規定はありません。
