CREATE OPERATOR

Nome

CREATE OPERATOR -- cria um operador

Sinopse

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 ]
)

Descrição

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:

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.

Parâmetros

nome

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).

nome_da_função

A função utilizada para implementar este operador.

tipo_à_esquerda

O tipo de dado do operando à esquerda do operador, se houver. Esta opção deve ser omitida em operadores unário esquerdo.

tipo_à_direita

O tipo de dado do operando à direita do operador, se houver. Esta opção deve ser omitida em operadores unário direito.

comutador_do_operador

O comutador deste operador.

negador_do_operador

O negador deste operador.

função_de_seletividade_da_restrição

A função que estima a seletividade da restrição para este operador.

função_de_seletividade_da_junção

A função que estima a seletividade da junção para este operador.

HASHES

Indica que este operador pode suportar uma junção por hash.

MERGES

Indica que este operador pode suportar uma junção por mesclagem.

operador_de_classificação_à_esquerda

Se este operador puder suportar uma junção por mesclagem, o operador menor-que que classifica o tipo de dado à esquerda deste operador.

operador_de_classificação_à_direita

Se este operador puder suportar uma junção por mesclagem, o operador menor-que que classifica o tipo de dado à direita deste operador.

operador_menor_que

Se este operador puder suportar uma junção por mesclagem, o operador menor-que que compara os tipos de dado de entrada deste operador.

operador_maior_que

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.===) ,

Observações

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.

Exemplos

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
);

Compatibilidade

O comando CREATE OPERATOR é uma extensão do PostgreSQL. O padrão SQL não trata de operadores definidos pelo usuário.

Consulte também

ALTER OPERATOR, CREATE OPERATOR CLASS, DROP OPERATOR

Notas

[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 Servertoken — 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.)

SourceForge.net Logo CSS válido!