15/8/2008 Objetivo • Descrever as funcionalidades de triggers, store procedures e funções; • Apresentar vantagens e benefícios; • Criação e Gerenciamento de Store Program; Programando em SQL Triggers, Stored Procedures e funções Profa. Késsia Marchi Profa. Késsia Marchi Stored procedures, Triggers e Funções • Procedimentos internos que tem a capacidade de disparar ações baseadas em eventos ocorridos em uma tabela ou em outros procedimentos; • Utilizados em tarefas rotineiras e repetitivas; • Diversos SGBD apresentam essas funcionalidades; • Podem ser criados por meio de várias linguagens de programação, como exemplo: – – – – – Linguagens SQL Perl Phthon C E outras... Profa. Késsia Marchi • Usados para eliminar erros obtidos através do uso da aspas. • Com o uso dos delimitadores ($$) o interpretador entende que esses caracteres definem o início e o fim da definição. Profa. Késsia Marchi • Funções, Trigger e Stored procedures apresentam sintaxe muito semelhantes – Distinguem-se pela forma de execução • Funções – Por chamadas a seus nomes, através de comandos como o select ou, em linguagens de programação, através de seus próprios métodos. • Trigger – Disparadas por eventos • Procedures – Declarações em programas aplicativos, funções ou triggers Profa. Késsia Marchi Caracteres delimitadores de string – CRIAR FUNÇÃO TESTE “FUNCAO=“TESTE”” -– CRAR FUNÇÃO TESTE $$FUNCAO= “TESTE”$$ Criação de Stored procedures, Triggers e Funções ERRO Relacionamento entre funções • O relacionamento entre funções se dá através do uso de ponteiros, utilizando os OID das funções que são invocadas. • Sempre que é necessário excluir e reconstruir uma função, o seu OID é alterado, logo, é necessário re-compilar todas as funções que invocam a função reconstruída. Profa. Késsia Marchi 1 15/8/2008 Funções • São blocos de códigos SQL armazenados no servidor de banco de dados que podem ser invocados a qualquer momento com o objetivo de realizar algum processamento em informações. • O objetivo da função não é o de realizar transação de negócios completas, mas sim, realizar pequenas operações, normalmente auxiliares, que possam ser solicitadas em um processo de transação. Profa. Késsia Marchi Funções • O uso das funções devem ser mesclados com as Stored Procedures e Triggers. • Cabe a Stored Procedures o gerenciamento das transações. • Cabe as funções a disponibilização de recursos e bibliotecas de códigos freqüentemente utilizadas, a fim de evitar a redundância da escrita e manutenção de códigos SQL no corpo da Stored Procedure. Profa. Késsia Marchi Funções já existentes em PostgreSQL • • • • • • • • USER CURRENT_USER current_setting('datestyle'); current_database() current_schema() inet_server_addr() generate_series(start, stop) generate_series(start, stop, step) • Funções de Agregação • Para conhecer todas as funções disponíveis no PostgreSQL 8.0 acesse http://www.postgresql.org/docs /8.3/static/functions.html UDF’s • Funções definidas pelo Usuário – Podem ser criadas por SQL ou em Linguagens de alto-nível (bibliotecas); – Aplica o conceito de re-utilização; – Útil para automatizar funções repetitivas; Profa. Késsia Marchi Profa. Késsia Marchi Criando funções CREATE FUNCTION nome(argumentos) RETURNS tipo_de_retorno AS $$ DECLARE -- bloco de declarações das variáveis BEGIN -- corpo da função END; $$ LANGUAGE plpgsql; Profa. Késsia Marchi Criando funções • Parâmetros – A lista de parâmetros devem estar sempre presentes. • Se não houver parâmetros indica uma lista vazia de ( ). • Cláusula RETURNS – Indica o tipo de retorno da função. – Caso não tenha retorno deve ser utilizada a opção VOID como tipo de retorno. Profa. Késsia Marchi 2 15/8/2008 Exemplo de Função • Exemplo de função sem o uso de nenhum objeto do BD. CREATE FUNCTION soma(valorA integer, valorB integer) RETURNS integer AS $$ DECLARE valor_total integer := 0; BEGIN valor_total = valorA + valorB; RETURN valor_total; END; $$ LANGUAGE plpgsql; Profa. Késsia Marchi Exemplo de Função • Alterar Função – Nome ALTER FUNCTION nome_antigo([argumentos]) RENAME TO novo_nome; Profa. Késsia Marchi Exclusão de Função Parêmetro Descrição Nome Informe o nome da função a ser removida; Argumentos Informe os tipos de dados dos argumentos da função que será removida. Opções É possível utilizar dois valores como opções de exclusão, sendo: CASCADE Ao utilizar a opção CASCADE, todos os objetos diretamente dependentes da função em questão são excluídos junto com a mesma. RESTRICT Se a opção RESTRICT for utilizada, somente a função será removida, mantendo todos os demais objetos independentes de suas dependencias. Ao utilizar esta opção, a CASCADE não poderá ser utilizada e vice-versa. Profa. Késsia Marchi Exemplo de Função • Exemplo de função utilizando tabelas no BD. CREATE FUNCTION capturaLinha() RETURNS RECORD AS $$ DECLARE -- Declara uma variável do tipo da linha da tabela em questão minhaLinha exemplo%ROWTYPE; BEGIN -- Captura uma linha qualquer na tabela específica SELECT * INTO minhaLinha from exemplo LIMIT 1; -- Exibe na tela um dos campos da linha retornada RAISE NOTICE 'O campo extexto desta linha: %', minhaLinha.extexto; --Retorna a linha completa RETURN minhaLinha; END; $$ LANGUAGE plpgsql; Profa. Késsia Marchi Exclusão de Função • DROP FUNCTION nome_função([argumentos]) opções; Profa. Késsia Marchi Referências Bibliográficas • Korth, Henry F. e Silbershcatz, Abraham; Sistemas de Banco de Dados; Elsevier; 5ª Ed., 2006. • Elmasri, Ramez; Sistemas de Banco de Dados; Addison Wesley, 2005. • MILANI, André; PostgreSQL Guia do Programador. Novatec, 2008 Profa. Késsia Marchi 3