Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
* * * Banco de Dados Trigger (Gatilhos) Luciana Vieira * * * Conceito de trigger Um trigger é uma procedure que, associada a uma tabela (ou visão), é executada automaticamente quando é inserido, alterado ou removido um registro da tabela. * * * Conceito de trigger Os comandos utilizados em um trigger são os mesmos das stored procedures, porém a execução da mesma não é feita pelo usuário e sim pelo SGBD na inserção, alteração ou remoção de registros. * * * Vantagens de usar triggers Nos triggers podemos observar as mesmas vantagens oferecidas pelas stored procedures: facilidade de manutenção, maior desempenho das aplicações, redução do tráfego na rede, e melhora da segurança com o controle das regras de negócio diretamente no servidor. * * * Criando um trigger Para criar um trigger utilize o comando CREATE TRIGGER. Sintaxe: DELIMITER [definição do caractere de finalização(delimiter $)] CREATE TRIGGER <nome> <momento> <evento> ON <tabela> FOR EACH ROW [BEGIN] <sentença> END [uso do caractere de finalização definido($)] DELIMITER ; * * * Criando um trigger nome é a identificação do gatilho momento é o instante em que o disparo deve ocorrer, podendo ser uma das opções BEFORE (antes) ou AFTER (depois) que serão executadas quando um determinado evento ocorrer; evento é a definição da ação que ativa o disparo, podendo ser um dos comandos INSERT, UPDATE ou DELETE; tabela é a identificação da tabela do banco de dados que sofrerá a ação e sentença é a ação a ser executada quando um determinado disparo ocorrer.Se for definida mais de uma ação, é necessário estabelecer um bloco de ação com os comandos BEGIN e END. * * * Utilizando um trigger Um trigger não é utilizado diretamente, ele é disparado pelo SGBD no momento do evento (inserção, alteração ou remoção). * * * Excluindo um trigger Para excluir um trigger utilize o comando DROP TRIGGER. Sintaxe: DROP TRIGGER <nome do trigger> EX: DROP TRIGGER Exemplo * * * Variáveis NEW e OLD Em um trigger é possível acessar qualquer valor antigo (OLD) ou novo (NEW) de uma coluna. Isto é feito para comparar valores de uma coluna antes e depois de um evento. Sintaxe: NEW.coluna OLD.coluna * * * Exemplo 1 CREATE TABLE funcionario ( codfun integer (11) NOT NULL, nome varchar (50) NOT NULL, depto char (2), funcao char (20), salario decimal (10,2), dtadmissao date, filhos smallint (6), cpf varchar (11), PRIMARY KEY (codfun) ) * * * Exemplo 1 CREATE TABLE auditoria (usuario varchar(40), acao varchar(9), dtacao date, hracao time, codigo integer); * * * Exemplo 1 A seguir serão criadas três triggers para controlar as ações de INSERT (cadastrou), DELETE (demitiu) e UPDATE (alterou), respectivamente, com os nomes tr_auditorInsert, tr_auditorDelete e tr_auditorUpdate. Antes de cada trigger utiliza-se a sigla tr para indicar que é uma trigger. * * * Exemplo 1: tr_auditorInsert CREATE TRIGGER tr_auditorInsert AFTER INSERT ON funcionario FOR each ROW INSERT INTO auditoria SET codigo = new.codfun, usuario = USER(), acao = 'Cadastrou', dtacao= curdate(), hracao = curtime(); * * * Exemplo 1: tr_auditorInsert * * * Exemplo 1: tr_auditorInsert Em seguida realize um insert na Tabela funcionario como mostrado a seguir: INSERT INTO funcionario VALUES ( 1, Marinalva', '3', 'programador', 1200.00, '2009-10-19',0,'11122233344'); * * * Exemplo 1: Resposta * * * Exemplo 1: tr_auditorUpdate CREATE TRIGGER tr_auditorUpdate BEFORE UPDATE ON funcionario FOR each ROW INSERT INTO auditoria SET codigo = new.codfun, usuario = USER(), acao = 'Alterou', dtacao= curdate(), hracao = curtime(); * * * Exemplo 1: tr_auditorUpdate * * * Exemplo 1: tr_auditorUpdate Em seguida realize um Update na Tabela funcionario como mostrado a seguir: UPDATE Funcionario SET Salario = Salario * 1.1 WHERE codfun = 1; * * * Exemplo 1: Resposta * * * Exemplo 1: tr_auditorDelete CREATE TRIGGER tr_auditorDelete BEFORE DELETE ON funcionario FOR each ROW INSERT INTO auditoria SET codigo = old.codfun, usuario = USER(), acao = ‘Demitiu', dtacao = curdate(), hracao = curtime(); * * * Exemplo 1: tr_auditorDelete * * * Exemplo 1: tr_auditorDelete Em seguida realize um Delete na Tabela funcionario como mostrado a seguir: DELETE FROM Funcionario WHERE codfun = 1; * * * Exemplo 1: Resposta * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Compartilhar