--############################################################# --######################## Aula 310/31 ###################### --############################################################# --####################################################################################### -- TRIGGERS -- Tipo especial de SP's que estão associadas a tabelas ou vistas e que são despoletadas -- através de eventos de acção (querys do tipo INSERT, UPDATE e DELETE) -- Permitem associar acções secundárias -- Permitem anular acções ilegais --####################################################################################### --####################################################################################### --SINTAXE --CREATE TRIGGER [nome] ON [tabela|vista] -- [tipo: FOR|INSTEAD OF] [acção: INSERT|UPDATE|DELETE] --AS -- --begin -- [corpo da trigger] --end --nota: as acções podem coexistir na mesma trigger --####################################################################################### --##################################################################################### --Quando é que uma Trigger dispara? --É possível especificar uma de duas opções para controlar quando uma trigger dispara: -- triggers do tipo AFTER ou FOR disparam após a acção (INSERT, UPDATE, or DELETE). -- triggers do tipo INSTEAD OF disparam em vez das acções (INSERT, UPDATE, or DELETE). -- Cada tabela ou vista pode ter uma trigger do tipo INSTEAD OF para cada acção. -- Uma tabela pode ter vários triggers do tipo AFTER para cada acção. --##################################################################################### /* Para os exemplos a seguir foram criadas as seguintes entidades: - Base de dados: Liga - Tabelas : - Clube (idClube, nome) - Jogador (idJogador, nome, idClube, ordenado) - Diagrama de relações (Relação de 1-N entre Clube e Jogador): - Com garantia de integridade referencial; - Mecanismo de eliminação e actualização de referências em cascata; */ --Exercicio1: --Criação de trigger na tabela Clubes e para o evento de acção inserção. --Envio de mensagem de sucesso na inserção de registo --criação da Trigger --Despoletar da trigger --Resultado Inserção feita com sucesso! 1 row(s) affected --Exercicio2: --Criação de trigger na tabela Jogador e para o evento de acção inserção e remoção. --Impossibilitar a inclusão e remoção de registos na tabela Jogador --criação da Trigger --Despoletar da trigger --Resultado Inserção ou Remoção não permitida. Operação cancelada! --Exercicio3: --Criação de trigger na tabela Clube e para o evento de inserção. -- Listar informação inserida através da tabela virtual INSERTED --Exercicio4: --Criação de trigger na tabela Clubes e para o evento de inserção. --Se o nome do clube for Real Madrid é feita a inserção de uma linha --na tabela Jogador com o campo nome a ser Figo e com o idClube correcto --(eliminar trigger tgProibir) --criação da Trigger --Despoletar da trigger --Resultado Inserção feita com sucesso! Acabou de inserir o clube Real Madrid 1 row(s) affected 1 row(s) affected -- 2 linhas afectadas pois na realidade foram feitas 2 inserções -- A inserção do despoletar da trigger e a inserção embebida na mesma -- Na tabela Jogador é inserida uma linha com o nome Figo e com o campo -- idClube (chave estrangeira) com uma referência correcta para o campo -- idClube (chave primária) da tabela Clube --sp_help 'clube' --sp_helptrigger @tabname='clube' --sp_helptext 'tgInfo'