CREATE OPERATOR
Function
CREATE OPERATOR defines a new operator.
Precautions
CREATE OPERATOR defines a new name operator. The user who defines the operator becomes the owner of the operator. If a schema name is given, the operator is created in the specified schema. Otherwise, it will be created in the current schema.
The operator name is a character string consisting of the following characters:
- * / < > = ~ ! @ # % ^ & | ` ?
When selecting a name, note the following restrictions:
-- and /* cannot appear anywhere in the operator name, because they are regarded as the beginning of a comment.
A multi-character operator cannot end with + or - unless the name contains at least one of the following characters:
~ ! @ # % ^ & | ` ?
=> The operator name is no longer used.
Operator! = is mapped to <> when being entered. Therefore, the two names are always equivalent.
At least one LEFTARG and one RIGHTARG must be defined. For binocular operators, both need to be defined. For the right operator, only LEFTARG needs to be defined. For the left operator, only RIGHTARG needs to be defined.
Also, the function_name procedure must have been defined with CREATE FUNCTION, and must be defined to accept the correct number of specified type parameters (one or two).
Other clauses declare optional operator optimization clauses. Their meanings are defined in Section 35.13.
To create an operator, you must have the USAGE permission on the parameter type and return type, and the EXECUTE permission on the underlying function. If exchange or negative operators are specified, you must have them.
Syntax
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 ]
)
Parameter Description
name
Operator to be defined. The available characters are listed above. The name can be schema-qualified, for example, CREATE OPERATOR myschema.+ (…). If there is no schema, the operator is created in the current schema. Two operators in the same schema can have the same name as long as they operate on different data types. This is a reloading process.
function_name
Function used to implement the operator.
left_type
Parameter data type on the left of the operator, if any. This parameter can be omitted if the left operator is used.
right_type
Parameter data type on the right of the operator, if any. This parameter can be omitted if the right-view operator is used.
com_op
Exchange operator corresponding to the operator.
neg_op
Negative operator corresponding to the operator.
res_proc
This operator constrains the selectivity evaluation function.
join_proc
This operator joins the selectivity evaluation function.
HASHES
Indicates that the operator supports hash joins.
MERGES
Indicates that this operator supports a merge join.
Use the OPERATOR() syntax to provide a schema-qualified operator name in com_op or other optional parameters. For example:
COMMUTATOR = OPERATOR(myschema.===) ,
Example
The following command defines a new operator: equal area for the box data type.
CREATE OPERATOR === (
LEFTARG = box,
RIGHTARG = box,
PROCEDURE = area_equal_procedure,
COMMUTATOR = ===,
NEGATOR = !==,
RESTRICT = area_restriction_procedure,
JOIN = area_join_procedure,
HASHES, MERGES
);