Sei sulla pagina 1di 16

BANCO DE DADOS II TRIGGERS

Frederico Queiroga fredericoqueiroga@gmail.com https://sites.google.com/site/fredericoqueiroga/

Gatilhos (Triggers)
Definio: Um trigger (gatilho) um conjunto de comandos SQL que automaticamente disparado quando um comando INSERT, UPDATE ou DELETE executado e modifica os dados de uma tabela especificada. Objetivos:
Utilizados para implementar regras de negcio da aplicao. Sua principal aplicao a criao de restries e consistncias de acesso ao banco de dados. Exemplo: Ao invs de restringir contas com saldos negativos, podemos querer ativar uma ao que automaticamente inicia um emprstimo para aquela conta.

Gatilhos (Triggers)
Um trigger uma regra do tipo E_C_A:
E: Evento ocorrido (insero, atualizao ou deleo) C: Condio a ser satisfeita na presena do evento E A: Ao a ser tomada caso a condio C seja satisfeita

Voltando ao nosso exemplo:


Ao invs de restringir contas com saldos negativos, podemos querer ativar uma ao que automaticamente inicia um emprstimo para aquela conta. Evento: operao de modificao do saldo Condio: se saldo < 0 Ao: Criar um emprstimo para conta

Gatilhos (Triggers)
Composio de um trigger:
Um nome: nico para cada banco de dados A maneira: um comando INSERT, UPDATE ou DELETE As instrues: um bloco de comandos SQL

Vnculo de um trigger:
Os gatilhos (triggers) so sempre vinculados a uma determinada tabela. Quando uma tabela removida, todos os gatilhos relacionados sero excludos/eliminados automaticamente. Os gatinhos tambm podem ser excludos manualmente pelo administrador do banco de dados. Quando criados so persistentes (armazenados no SGBD) at a sua excluso.

Gatilhos (Triggers)
Sintaxe para criar: CREATE TRIGGER <nome do gatilho> ON <tabela> FOR [INSERT][,][UPDATE][,][DELETE] AS <comandos SQL> Sintaxe para eliminar: DROP TRIGGER <nome do gatilho>

Gatilhos no SQL Server


Funcionamento:
Quando um trigger executado, o SQL Server cria uma ou duas tabelas temporrias que ficam residentes na memria e existem apenas enquanto o trigger estiver ativo. Essas duas tabelas temporrias recebem o nome de INSERTED e DELETED. As duas tabelas contm a mesma estrutura da tabela de base onde o trigger foi criado. Voc pode consultar dados nessas tabelas com o SELECT, da mesma forma que uma tabela real. Observao: os dados das tabelas INSERTED e DELETED s podem ser consultados dentro do gatilho.

Gatilhos no SQL Server


Funcionamento:
Quando um comando INSERT executado, o registro criado ser copiado para a tabela da base e para a tabela INSERTED. Quando um comando DELETE executado, o registro excludo armazenado na tabela DELETED. Quando um comando UPDATE executado, o registro original (registro antigo) armazenado na tabela DELETED e o registro modificado (registro atual) armazenado na tabela de base e na tabela INSERTED. Os momentos de disparo so definidos para atuarem quando o respectivo comando de modificao for executado. Observao: um trigger de INSERT no vai ser disparado quando a tabela sofre um UPDATE.

Gatilhos (Triggers) Exemplo 1


Criando uma tabela chamada Exemplo: Create Table Exemplo1 (Codigo Int) Criando um gatilho para a tabela Exemplo1 que mostre a operao realizada (insero, excluso ou atualizao):
CREATE TRIGGER Tr_Exemplo1 ON Exemplo1 FOR Insert, Update, Delete AS Begin If Exists (Select Codigo From Deleted) Begin If Exists (Select Codigo From Inserted) Print 'Foi realizada uma atualizao (Update)' Else Print 'Foi realizada uma excluso (Delete)' End Else Print 'Foi realizada uma insero (Insert) End

Gatilhos (Triggers) Exemplo 1


Execuo 1:
INSERT INTO Exemplo1 VALUES (1) Mensagem Foi realizada uma insero (INSERT)

Execuo 2:
UPDATE Exemplo1 SET Codigo = 2 Mensagem Foi realizada uma atualizao (UPDATE)

Execuo 3:
DELETE FROM Exemplo1 Mensagem Foi realizada uma excluso (DELETE)

Gatilhos (Triggers) Exemplo 2


Criando uma tabela chamada Estoque:
Create Table Estoque (Codigo Int, Produto Char(10), Qtd Int, QtdMinima Int)

Criando uma tabela chamada Compras:


Create Table Compras (Codigo Int, Qtd Int)

Criando uma tabela chamada Vendas:


Create Table Vendas (Codigo Int, Qtd Int)

Gatilhos (Triggers) Exemplo 2.1


Criar um gatilho para:
Ao ser realizada uma venda de um produto: a quantidade em estoque deve ser decrementada. Tambm deve-se comparar com sua quantidade mnima em estoque: caso a quantidade mnima seja atingida, uma mensagem deve ser emitida.

Gatilhos (Triggers) Exemplo 2.1


CREATE TRIGGER Tr_Vendas ON Vendas FOR Insert AS DECLARE @Codigo int, @Qtde_Estoque int, @Qtde_Minima int BEGIN Selecionar dados do SELECT @Codigo = I.Codigo, produto vendido. Observao: a tabela INSERTED @Qtde_Estoque = E.Qtd I.Qtd, tem o ltimo produto vendido! @Qtde_Minima = E.QtdMinima FROM Estoque E, Inserted I WHERE I.Codigo = E.Codigo UPDATE Estoque SET Qtd = @Qtde_Estoque WHERE Codigo = @Codigo
Atualizar o estoque do produto vendido.

IF (@Qtde_Estoque <= @Qtde_Minima) PRINT 'Existem Produtos em Falta' END

Dar mensagem de quantidade mnima.

Gatilhos (Triggers) Exemplo 2.2


Criar um gatilho para:
Quando um produto for comprado: ajustar a quantidade do produto no estoque. Exibir mensagens da quantidade de estoque antes e depois da compra.

Gatilhos (Triggers) Exemplo 2.2


CREATE TRIGGER Tr_Compras ON Compras FOR Insert AS DECLARE @Codigo int, @Qtde_Antes int, @Qtde_Depois int, @Qtde_Comprada int BEGIN SELECT @Codigo = I.Codigo, @Qtde_Antes = E.Qtd, @Qtde_Comprada = I.Qtd FROM Estoque E, Inserted I WHERE I.Codigo = E.Codigo PRINT Qtde. de produtos antes da compra:+ convert(char,@Qtde_Antes) SELECT @Qtde_Depois = @Qtde_Antes + @Qtde_Comprada UPDATE Estoque SET Qtd = @Qtde_Depois WHERE Codigo = @Codigo PRINT `Qtde. de produtos depois da compra:+convert(char,@Qtde_Depois) END

Gatilhos (Triggers)
Observaes importantes: Triggers no podem ser criados para tabelas temporrias. Triggers no possuem parmetros e no podem ser explicitamente invocados: so disparados apenas quando os dados da tabela protegida so modificados. Triggers so considerados como parte de uma transao: se houver falha no seu funcionamento, os comandos sero revertidos (ROLLBACK).

Gatilhos (Triggers)

Fim

Potrebbero piacerti anche