CREATE OPERATOR nome ( PROCEDURE = nome_da_função [, LEFTARG = tipo_à_esquerda ] [, RIGHTARG = tipo_à_direita ] [, COMMUTATOR = comutador_do_operador ] [, NEGATOR = negador_do_operador ] [, RESTRICT = função_de_seletividade_da_restrição ] [, JOIN = função_de_seletividade_da_junção ] [, HASHES ] [, MERGES ] [, SORT1 = operador_de_classificação_à_esquerda ] [, SORT2 = operador_de_classificação_à_direita ] [, LTCMP = operador_menor_que ] [, GTCMP = operador_maior_que ] )
O comando CREATE OPERATOR define o novo operador, nome. O usuário que define o operador se torna seu dono. Se for fornecido o nome do esquema, então o operador será criado no esquema especificado, senão será criado no esquema corrente. [1]
O nome do operador é uma seqüência com até NAMEDATALEN-1 (63, por padrão) caracteres da seguinte lista:
+ - * / < > = ~ ! @ # % ^ & | ` ?
Existem algumas restrições na escolha do nome:
As seqüências -- e /* não podem ocorrer em nenhum lugar no nome do operador, uma vez que são consideradas início de comentário.
Um nome de operador multicaractere não pode terminar por + ou por -, a não ser que o nome também contenha pelo menos um destes caracteres:
~ ! @ # % ^ & | ` ?
Por exemplo, @- é um nome de operador permitido, mas *- não é. Esta restrição permite ao PostgreSQL analisar comandos em conformidade com o SQL sem requerer espaços entre os símbolos (tokens [2] [3] [4] [5] ).
O operador != é mapeado para <> na entrada e, portanto, estes dois nomes são sempre equivalentes.
Com relação a LEFTARG e RIGHTARG, pelo menos um dos dois deve ser definido; para operadores binários os dois devem ser definidos. Para operadores unário direito somente LEFTARG deve ser definido, enquanto que para operadores unário esquerdo somente RIGHTARG deve ser definido.
O procedimento nome_da_função deve ser previamente definido utilizando o comando CREATE FUNCTION, e deve ser definido aceitando o número correto de argumentos (um ou dois) dos tipos indicados.
As outras cláusulas especificam cláusulas de otimização de operador opcionais. Seus significados estão descritos na Seção 31.12.
O nome do operador a ser definido. Veja acima os caracteres permitidos. O nome pode ser qualificado pelo esquema como, por exemplo, CREATE OPERATOR meu_esquema.+ (...); caso não seja, o operador será criado no esquema corrente. Dois operadores no mesmo esquema podem possuir o mesmo nome se operarem sobre tipos de dado diferentes. Isto se chama sobrecarga (overload).
A função utilizada para implementar este operador.
O tipo de dado do operando à esquerda do operador, se houver. Esta opção deve ser omitida em operadores unário esquerdo.
O tipo de dado do operando à direita do operador, se houver. Esta opção deve ser omitida em operadores unário direito.
O comutador deste operador.
O negador deste operador.
A função que estima a seletividade da restrição para este operador.
A função que estima a seletividade da junção para este operador.
Indica que este operador pode suportar uma junção por hash.
Indica que este operador pode suportar uma junção por mesclagem.
Se este operador puder suportar uma junção por mesclagem, o operador menor-que que classifica o tipo de dado à esquerda deste operador.
Se este operador puder suportar uma junção por mesclagem, o operador menor-que que classifica o tipo de dado à direita deste operador.
Se este operador puder suportar uma junção por mesclagem, o operador menor-que que compara os tipos de dado de entrada deste operador.
Se este operador puder suportar uma junção por mesclagem, o operador maior-que que compara os tipos de dado de entrada deste operador.
Para poder usar um nome de operador qualificado pelo esquema em comutador_do_operador, ou os demais argumentos opcionais, deve ser utilizada a sintaxe de OPERATOR() como, por exemplo,
COMMUTATOR = OPERATOR(meu_esquema.===) ,
Para obter mais informações deve ser consultada a Seção 31.12.
Para remover do banco de dados operadores definidos pelo usuário deve ser utilizado o comando DROP OPERATOR. Para modificar os operadores presentes no banco de dados deve ser utilizado o comando ALTER OPERATOR.
O comando abaixo define um novo operador, area-equality (igualdade de área), para o tipo de dado box:
CREATE OPERATOR === ( LEFTARG = box, RIGHTARG = box, PROCEDURE = area_equal_procedure, COMMUTATOR = ===, NEGATOR = !==, RESTRICT = area_restriction_procedure, JOIN = area_join_procedure, HASHES, SORT1 = <<<, SORT2 = <<< -- Uma vez que foram fornecidos os operadores de classificação, -- está implicado MERGES. -- LTCMP e GTCMP são assumidos como sendo < e >, respectivamente );
O comando CREATE OPERATOR é uma extensão do PostgreSQL. O padrão SQL não trata de operadores definidos pelo usuário.
[1] |
Oracle — Para criar um operador e definir suas ligações é utilizado o comando CREATE OPERATOR. Os operadores podem ser referenciados pelos tipos índice (indextypes), pelas consultas SQL e pelos comandos da DML. Por sua vez, os operadores fazem referência a funções, pacotes, tipos e outros objetos definidos pelo usuário. Oracle® Database SQL Reference 10g Release 1 (10.1) Part Number B10759-01 (N. do T.) |
[2] |
token — gramática — Uma unidade básica da linguagem, gramaticalmente indivisível, como uma palavra chave, um operador ou um identificador. FOLDOC - Free On-Line Dictionary of Computing (N. do T.) |
[3] |
SQL Server — token — Na procura de texto integral (full-text search), uma palavra ou uma cadeia de caracteres identificada por um quebrador de palavra (word breaker). SQL Server 2005 Books Online — Glossary of Terms (N. do T.) |
[4] |
DB2 — Os tokens são as unidades sintáticas básicas do SQL. O token é uma seqüência de um ou mais caracteres. O token não pode conter caracteres branco, a menos que seja uma constante cadeia ou um identificador delimitado, que podem conter brancos. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.) |
[5] |
token — [processamento de dados] s. indicação, f.; marca, f.; símbolo, m.; sinal, m.; unidade distinguível em uma seqüência de caracteres. token | Portuguese | Dictionary & Translation by Babylon (N. do T.) |