Create Function

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Create Function

Mensagem por Bruno Cavalcante em Ter 11 Out - 11:08

Galera, abaixo tem uma explicação e a sintaxe para criação de uma function.Aproveite e bons estudos


Name
CREATE FUNCTION -- define uma nova função
Synopsis

CREATE [ OR REPLACE ] FUNCTION nome ( [ tipo_do_argumento [, ...] ] )
RETURNS tipo_retornado
AS 'definição'
LANGUAGE nome_ling
[ WITH ( atributo [, ...] ) ]
CREATE [ OR REPLACE ] FUNCTION nome ( [ tipo_do_argumento [, ...] ] )
RETURNS tipo_retornado
AS 'arq_objeto', 'simbolo_de_ligação'
LANGUAGE nome_ling
[ WITH ( atributo [, ...] ) ]

Descrição

O comando CREATE FUNCTION define uma nova função. O comando CREATE OR REPLACE FUNCTION tanto cria uma nova função, quanto substitui uma função existente.

Parâmetros

nome

O nome da função a ser criada. Não é necessário que o nome seja único, porque as funções podem ser sobrecarregadas (overloaded), mas as funções que possuem o mesmo nome devem ter argumentos de tipos diferentes.
tipo_do_argumento

Os tipos de dado dos argumentos da função, caso existam. Os tipos de dado da entrada podem ser o tipo base, complexo, opaque, ou o mesmo tipo de uma coluna existente. Opaque indica que a função aceita argumentos de tipo não SQL, como o char *. O tipo de dado da coluna é referenciado escrevendo-se nome_da_tabela.nome_da_coluna%TYPE; utilizando-se esta notação ajuda a função se tornar independente das mudanças ocorridas na estrutura da tabela.
tipo_retornado

O tipo do dado retornado. O tipo de dado retornado pode ser especificado como um tipo base, complexo, setof, opaque, ou o mesmo tipo de uma coluna existente. O modificador setof indica que a função retorna um conjunto de itens, em vez de um único item. As funções em que se declara opaque para o valor do tipo retornado não retornam valor, e não podem ser chamadas diretamente; as funções dos gatilhos fazem uso desta funcionalidade.
definição

Uma cadeia de caracteres contendo a definição da função; o significado depende da linguagem. Pode ser o nome de uma função interna, o caminho para um arquivo objeto, uma consulta SQL, ou um texto escrito em uma linguagem procedural.
arq_objeto, simbolo_de_ligação

Esta forma da cláusula AS é usada para funções escritas na linguagem C, ligadas dinamicamente, quando o nome da função no código fonte da linguagem C não é o mesmo nome da função SQL. A cadeia de caracteres arq_objeto é o nome do arquivo contendo o objeto carregado dinamicamente, e simbolo_de_ligação é o símbolo de ligação do objeto, ou seja, o nome da função no código fonte escrito na linguagem C.
nome_ling

Pode ser SQL, C, internal, ou nome_ling_proc, onde nome_ling_proc é o nome de uma linguagem procedural criada. Consulte o comando CREATE LANGUAGE para obter mais detalhes. Para manter a compatibilidade com as versões anteriores, o nome pode estar entre apóstrofos (').
atributo

Uma informação opcional sobre a função, utilizada para otimização. Veja abaixo para obter mais detalhes.

O usuário que cria a função torna-se o dono da função.

Os seguintes atributos podem estar presentes na cláusula WITH:

iscachable

O atributo Iscachable indica que a função sempre retorna o mesmo resultado quando recebe os mesmos valores para os argumentos (ou seja, não faz consultas ao banco de dados e também não utiliza informações que não estejam diretamente presentes na sua lista de parâmetros). O otimizador utiliza o atributo iscachable para saber se é seguro pré-executar a chamada da função.
isstrict

O atributo isstrict indica que a função sempre retorna NULL quando qualquer um de seus argumentos for nulo. Se este atributo for especificado, a função não será executada quando houver argumento nulo, ou seja, um resultado nulo será assumido automaticamente. Quando o atributo isstrict não for especificado, a função será chamada mesmo com argumentos de entrada nulos. Fica sendo responsabilidade do autor da função verificar valores nulos, se for necessário, e responder de forma apropriada.

Notas

Consulte o capítulo do Guia do Programador do PostgreSQL relativo à extensão do PostgreSQL através de funções para obter mais informações sobre como escrever funções externas.

A sintaxe completa do SQL é permitida para os argumentos de entrada e o valor retornado. Entretanto, alguns detalhes da especificação do tipo (por exemplo, a precisão para tipos numeric) são responsabilidade da implementação da função subjacente sendo silenciosamente aceitos pelo comando CREATE FUNCTION (ou seja, não são reconhecidos ou exigidos).

O PostgreSQL permite a sobrecarga de função, ou seja, o mesmo nome pode ser usado por várias funções diferentes desde que possuam argumentos com tipos diferentes. Entretanto, esta funcionalidade deve ser usada com cuidado para as funções internas e para as funções escritas na linguagem C.

Duas funções internal não podem possuir o mesmo nome no código C sem causar erros durante a fase de ligação. Para contornar este problema deve-se dar nomes diferentes no código C (por exemplo, usar os tipos dos argumentos como parte do nome no código C), então especificar este nome na cláusula AS do comando CREATE FUNCTION. Se a cláusula AS for omitida, então CREATE FUNCTION assume que o nome da função no código C tem o mesmo nome do SQL.

Analogamente, ao se sobrecarregar o nome das funções SQL através de várias funções escritas na linguagem C, deve ser dado a cada instância da função na linguagem C um nome distinto e, então, usar a forma alternativa da cláusula AS na sintaxe do CREATE FUNCTION para selecionar a implementação apropriada na linguagem C de cada função SQL sobrecarregada.

Quando chamadas repetidas ao comando CREATE FUNCTION fazem referência ao mesmo arquivo objeto, o arquivo só é carregado uma vez. Para descarregar e carregar o arquivo (talvez durante a fase de desenvolvimento), use o comando LOAD.

Use o comando DROP FUNCTION para remover as funções definidas pelo usuário.

Para atualizar a definição de uma função existente use o comando CREATE OR REPLACE FUNCTION. Observe que não é possível mudar o nome ou os tipos dos argumentos da função desta forma (se for tentado, será criada uma nova função distinta). O comando CREATE OR REPLACE FUNCTION também não permite que se mude o tipo do valor retornado de uma função existente. Para fazer isto, a função deve ser removida e recriada.

Se a função for removida e recriada, a nova função não é mais a mesma entidade que era antes; ficarão inválidas as regras, visões, gatilhos, etc... existentes que faziam referência à antiga função. Use o comando CREATE OR REPLACE FUNCTION para mudar a definição de uma função, sem invalidar os objetos que fazem referência à função.
Exemplos

Para criar uma função SQL simples:

CREATE FUNCTION um() RETURNS integer
AS 'SELECT 1 AS RESULTADO;'
LANGUAGE SQL;

SELECT um() AS resposta;
resposta
----------
1

Este exemplo cria uma função C chamando a rotina de uma biblioteca compartilhada criada pelo usuário chamada funcs.so (a extensão pode variar entre plataformas). O arquivo contendo a biblioteca compartilhada é procurado no caminho de procura de biblioteca compartilhada do servidor. Esta rotina em particular calcula o dígito verificador e retorna TRUE se o dígito verificador dos parâmetros da função está correto. A intenção é utilizar esta função numa restrição de verificação (CHECK).

CREATE FUNCTION ean_checkdigit(char, char) RETURNS boolean
AS 'funcs' LANGUAGE C;

CREATE TABLE product (
id char(Cool PRIMARY KEY,
eanprefix char(Cool CHECK (eanprefix ~ '[0-9]{2}-[0-9]{5}')
REFERENCES brandname(ean_prefix),
eancode char(6) CHECK (eancode ~ '[0-9]{6}'),
CONSTRAINT ean CHECK (ean_checkdigit(eanprefix, eancode))
);

No próximo exemplo é criada uma função que faz a conversão de tipo, do tipo complexo definido pelo usuário e o tipo nativo point. A função é implementada por um objeto carregado dinamicamente que foi compilado a partir de um fonte C (está ilustrada a alternativa obsoleta de se especificar o caminho absoluto para o arquivo contendo o objeto compartilhado). Para o PostgreSQL encontrar a função de conversão de tipo automaticamente, a função SQL deve ter o mesmo nome do tipo retornado, e por isso a sobrecarga é inevitável. O nome da função é sobrecarregado utilizando-se a segunda forma da cláusula AS na definição SQL:

CREATE FUNCTION point(complex) RETURNS point
AS '/home/bernie/pgsql/lib/complex.so', 'complex_to_point'
LANGUAGE C;

A declaração em C da função poderia ser:

Point * complex_to_point (Complex *z)
{
Point *p;

p = (Point *) palloc(sizeof(Point));
p->x = z->x;
p->y = z->y;

return p;
}

Compatibilidade

O comando CREATE FUNCTION é definido no SQL99. A versão do PostgreSQL é similar mas não é totalmente compatível. Os atributos não são portáveis, nem as diferentes linguagens disponíveis o são. [Você precisa estar registrado e conectado para ver esta imagem.]

__________________________________________

_____________Programação em Foco____________

_________________Seu Fórum__________________


Bruno Cavalcante
Acesse: [Você precisa estar registrado e conectado para ver este link.]
avatar
Bruno Cavalcante
Turma 20.911

Mensagens : 89
Reputação : -1
Data de inscrição : 30/03/2011
Localização : DF

http://www.kavalcanty.blogspot.com/

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum