Prof. (a): Danilo Monteiro Ribeiro
Aula de Funções
Banco de Dados Avançado
Revisão
• CREATE VIEW nomedaview AS query;
• Exemplo:
– CREATE VIEW buscaNome AS SELECT nome FROM pessoa
• Como usar
– SELECT * FROM buscaNome
• CREATE MATERIALIZED VIEW nomedaview AS query
• Exemplo
– CREATE MATERIALIZED VIEW buscaNomeIdade AS SELECT nome,idade FROM Pessoa
• Funções (comandos mais comuns)
• Gatilhos (triggers)
• As funções foram acrescentadas ao padrão SQL por volta de 1996.
• Esse recurso permite ao usuário definir procedimentos (e funções) contendo
comandos SQL, que são armazenados no
servidor do SGBD e invocados pelo cliente por meio de um comando especial.
• Em outras palavras funções é uma coleção de comandos em SQL (ou outras linguagens)
disponíveis em Banco de dados. Encapsula tarefas repetitivas, aceita parâmetros de entrada e retorna um valor de status (para indicar aceitação ou falha na execução).
• VANTAGENS DO USO DE funções
• - Pode reduzir de tráfico de rede.
• - Pode aumenta a performance da aplicação, particularmente que requerem conexão e tem baixa velocidade.
• - São analisadas, optimizadas e armazenadas em uma forma executável no momento em que são adicionadas ao banco de dados.
• VANTAGENS DO USO DE funções
• É possível executar operações muito mais complexas que uma simples query.
• - Pode ser usada por aplicações distintas.
• - Pode proporcionar mais segurança ao banco de dados, acessando tabelas que o usuário
não tem acesso
• Permitem estender o poder da linguagem SQL através da criação de um conjunto de rotinas que podem ser usadas por aplicações
simplesmente passando parâmetros apropriados.
• Por estarem centralizadas no servidor essas rotinas podem ser atualizadas sem
preocupação com a sua disseminação para um número grande de aplicações.
• - Funções em Linguagem SQL: São funções que utilizam a sintaxe SQL e se caracterizam por não possuírem estruturas de condição (if, else, case), estruturas de repetição (while, do while, for), não permitirem a criação de
variáveis e utilizam sempre algum dos
seguintes comandos SQL: SELECT, INSERT, DELETE ou UPDATE.
• Para criar uma funções utilizando SQL no PostgreSQL utiliza-se o comando CREATE
• FUNCTION, da seguinte forma:
• CREATE [ OR REPLACE ] FUNCTION nome ( [ tipo_do_parametro1 [, ...] ]
• )
• RETURNS tipo_retornado AS '
• Implementacao_da_funcao;
• '
• LANGUAGE SQL; 12
SELECT soma(1,3);
• - Funções de Linguagens Procedurais: ao
contrário das funções SQL, aqui é permitido o uso de estruturas de condição e repetição e o uso de variáveis. As funções em linguagens
procedurais caracterizam-se também por não possuírem apenas uma possibilidade de
linguagem, mas várias. Normalmente a mais utilizada é conhecida como PL/PgSQL,
linguagem fortemente semelhante ao conhecido PL/SQL utilizado no Oracle.
SELECT calcularAno(2018,3); 22
• exemplo
• Quando desejar excluir uma função do sistema utilize o comando:
• DROP FUNCTION nome_da_funcao();
• Para excluir uma função é necessário passar toda a sua assinatura:
• DROP FUNCTION nome_da_funcao(INTEGER);
• Ainda existe o fato que no momento da
exclusão você pode excluir a função passando mais um parâmetro, como no exemplo a
seguir:
• DROP FUNCTION totalNota(INTEGER) RESTRICT;
• ou
• Passando o RESTRICT como parâmetro, a
exclusão da função será recusada caso existam dependências de objetos em torno da função (como por exemplo, triggers e operadores).
Com o CASCADE esses objetos serão excluídos juntamente com a função.
• GATILHOS (triggers)
• Gatilhos são semelhantes a funções, só que no lugar de terem que ser chamados a executar, existe condições especiais(gatilhos) para que ele se execute sozinho
• INSERT, delete update
– Podemos usar um Gatilho ( Trigger ) nos seguintes casos:
– Gravar trilha de auditoria de operações em uma tabela
– Tratar regras de negócio em operações feitas em uma tabela – Garantir integridade dos dados de uma tabela
– Validar uma operação de atualização em uma tabela
– Atualizar informações de cálculo em campos de uma tabela
• CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE emp_stamp();
• Um gatilho marcado FOR EACH ROW é
chamado uma vez para cada linha modificada pela operação. Por exemplo, um DELETE que afeta 10 linhas fará com que todos os
acionadores ON DELETE na relação de destino sejam chamados 10 vezes separadas, uma vez para cada linha excluída. Por outro lado, um acionador marcado como FOR EACH