Banco de Dados II Triggers e Functions Prof. Moser Fagundes Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas
Sumário da aula Functions (funções) Triggers (gatilhos) Atividades
Functions (funções) As functions tem uma estrutura muito semelhante aos procedures, porém há duas diferenças: As funções sempre retornam um valor, enquanto os procedimentos apenas retornam valores através de parâmetros OUT explicitamente declarados. As funções podem ser usadas de forma direta dentro de comandos SQL, enquanto os procedimentos somente podem ser usados através do comando CALL.
Objetivo das functions O objetivo das functions não é realizar transações de negócio completas como os procedures, mas sim realizar pequenas operações auxiliares como: Formatações de texto e variáveis Operações repetitivas e rotineiras que possam ser compartilhadas por diversos procedimentos
Criando uma function DELIMITER <caractere delimitador> CREATE FUNCTION <nome-da-funcao>[(params)] RETURNS <tipo-de-retorno> BEGIN <instruções> RETURN <valor>; END <caracter delimitador> DELIMITER ;
Criando uma function DELIMITER <caractere delimitador> CREATE FUNCTION <nome-da-funcao>[(params)] RETURNS <tipo-de-retorno> BEGIN <instruções> RETURN <valor>; END <caracter delimitador> DELIMITER ; Em funções, os parâmetros são sempre do tipo IN
Excluindo uma function Para excluir uma function, devemos primeiro tornar o Banco de Dados ativo com o comando: USE <nome-do-bd>; Logo, devemos usar o seguinte comando: DROP FUNCTION <nome-da-funcao>;
Exemplos de functions Ver arquivo SQL na página da disciplina [bd2-aula-6-functions.sql]
Triggers (gatilhos) Triggers, também conhecidos como gatilhos, são um recurso muito interessante quanto ao aspecto de o Banco de Dados ter um pouco mais de vida própria, sem a dependência constante de um usuário ou aplicação estar o acompanhando.
Triggers (gatilhos) Bloco SQL armazenado no servidor que é disparado de forma automática e implicita sempre que ocorrer um determinado evento associado a uma tabela: INSERT DELETE UPDATE Não pode ser chamado explicitamente através do comando CALL como os procedimentos.
Utilidades dos triggers Automatização de certas operações no BD: Manutenção de tabelas de auditoria Manutenção de tabelas duplicatas Geração de valores de colunas referentes a atributos derivados Validação de restrições de integridade mais complexas que aquelas suportadas diretamente pelo SGBD
Tipos de trigger Conceitualmente, o MySQL oferece dois tipos de triggers básicos: Os que disparam a execução de um código antes (BEFORE) de um evento, e Os que disparam a execução de um código depois (AFTER) de um evento.
Tipos de trigger Podemos ter 6 combinações BEFORE INSERT BEFORE UPDATE BEFORE DELETE AFTER INSERT AFTER UPDATE AFTER DELETE
Criando um trigger DELIMITER <caractere delimitador> CREATE TRIGGER <nome-do-trigger> <tipo-do-trigger> ON <nome-tabela> FOR EACH ROW BEGIN <instruções> END <caracter delimitador> DELIMITER ;
Criando um trigger DELIMITER <caractere delimitador> CREATE TRIGGER <nome-do-trigger> <tipo-do-trigger> ON <nome-tabela> FOR EACH ROW BEGIN Nome do trigger que <instruções> está sendo criado END <caracter delimitador> DELIMITER ;
Criando um trigger DELIMITER <caractere delimitador> CREATE TRIGGER <nome-do-trigger> <tipo-do-trigger> ON <nome-tabela> FOR EACH ROW BEGIN BEFORE INSERT <instruções> BEFORE UPDATE BEFORE DELETE END <caracter delimitador> AFTER INSERT AFTER UPDATE DELIMITER ; AFTER DELETE
Criando um trigger DELIMITER <caractere delimitador> CREATE TRIGGER <nome-do-trigger> <tipo-do-trigger> ON <nome-tabela> FOR EACH ROW BEGIN <instruções> END <caracter delimitador> DELIMITER ; Nome da tabela onde está sendo feita a inserção, remoção ou atualização
Criando um trigger DELIMITER <caractere delimitador> CREATE TRIGGER <nome-do-trigger> <tipo-do-trigger> ON <nome-tabela> FOR EACH ROW BEGIN <instruções> END <caracter delimitador> DELIMITER ; Podemos usar a variável OLD para fazer referência à tabela antes do evento, e NEW para referenciar tabela após o evento. OLD.nome_da_coluna NEW.nome_da_coluna
Excluindo um trigger Para excluir um trigger, devemos primeiro tornar o Banco de Dados ativo com o comando: USE <nome-do-bd>; Logo, devemos usar o seguinte comando: DROP TRIGGER <nome-do-trigger>;
Observações Atualizações a partir de ações para manutenção de integridade em chaves estrangeiras, como por exemplo ON DELETE CASCADE e ON UPDATE CASCADE, não disparam triggers!
Observações No MySQL você só pode associar um trigger de cada tipo a uma tabela. Por exemplo, você só pode associar um trigger BEFORE UPDATE, um trigger AFTER INSERT, etc... a uma tabela. Você não pode associar triggers com tabelas temporárias ou views.
Exemplos de triggers Ver arquivo SQL na página da disciplina [bd2-aula-6-triggers.sql]
Atividades Lista de Exercicios 4 disponível no site.
Contato Página da disciplina: www.fagundes.pro.br/aulas/tsi-bd2/ Contato por e-mail: moserfagundes@charqueadas.ifsul.edu.br