Новые операторы создаются командой SQL CREATE OPERATOR. Синтаксис команды
CREATE OPERATOR:
CREATE OPERATOR оператор ( PROCEDURE = функция
[. LEFTARG = тип! ]
[. RIGHTARG = тип2 ]
[. COMMUTATOR = коммутатор ]
[. NEGATOR = инвертор ]
[. RESTRICT = функция ограничения ]
[. JOIN = функция_обьединения ]
[. HASHES ]
[. SORT1 = левдя_сортировкд ]
[. SORT2 = правая_сортировка ] )
В этом определении оператор — символ нового оператора, а функция — имя функции, вызываемой этим оператором. Остальные секции не обязательны, хотя в определении должна присутствовать хотя бы одна из секций LEFTARG или RIGHTARG. Оператор может состоять из следующих символов:
*-*/<>=~!@#*Л&|-?$
Примечание 2
Примечание 2
За дополнительной информацией об остальных секциях команды CREATE OPERATOR и ограничениях на символы операторов обращайтесь к документации.
Если в команде CREATE OPERATOR указан только тип данных LEFTARG, оператор работает только с левым операндом (константой или идентификатором). И наоборот, если указан только тип RIGHTARG, оператор работает только с правым операндом. При указании обоих типов данных, LEFTARG и RIGHTARG, оператор работает с обоими операндами, левым и правым.
Хорошим примером встроенного оператора, использующего только левый операнд, является оператор факториала (!), а оператор сложения работает с обоими операндами. Количество аргументов функции, указанной в команде CREATE OPERATOR, должно соответствовать использованию ключевых слов LEFTARG и RIGHTARG (один или два аргумента). Более того, типы аргументов функции должны соответствовать типам, указанным в команде CREATE OPERATOR.
В листинге 7.53 создается оператор !#, левый операнд которого передается функции is_zero() (см. листинг 7.49). Следовательно, обозначение х !# эквивалентно вызову функции is_zero(x).