Criou página com '= Triggers = <br> * Triggers, ou gatilhos são stored procedures em PL/SQL ou Java executadas (disparadas) implicitamente * Não possuem nenhum “chamamento” explícito,...' |
|||
| Linha 4: | Linha 4: | ||
* Triggers, ou gatilhos são stored procedures em PL/SQL ou Java executadas (disparadas) implicitamente | * Triggers, ou gatilhos são stored procedures em PL/SQL ou Java executadas (disparadas) implicitamente | ||
* Triggers facilitam o desenvolvimento de aplicações e a maioria dos BDs relacionais possui a técnica de Trigger que é utilizada para poder colocar uma determinada regra de negócio da aplicação | |||
* Não possuem nenhum “chamamento” explícito, sempre que uma tabela ou view é modificada ou ainda quando acontece alguma determinada ação do usuário ou até mesmo ações do próprio banco de dados. | * Não possuem nenhum “chamamento” explícito, sempre que uma tabela ou view é modificada ou ainda quando acontece alguma determinada ação do usuário ou até mesmo ações do próprio banco de dados. | ||
* Triggers são uma parte crítica de qualquer aplicação bem modelada e, através deles, é possível garantir as seguintes funcionalidades: | * Triggers são uma parte crítica de qualquer aplicação bem modelada e, através deles, é possível garantir as seguintes funcionalidades: | ||
** Executar validações de alterações feitas em tabelas ou views: triggers oferecem uma forte garantia na validação de informações, pois esta validação está ligada diretamente ao objeto do banco de dados (tabela ou view) | ** Executar validações de alterações feitas em tabelas ou views: triggers oferecem uma forte garantia na validação de informações, pois esta validação está ligada diretamente ao objeto do banco de dados (tabela ou view) | ||
** Automatizar manutenções no banco de dados: a partir | ** Automatizar manutenções no banco de dados: a partir de algumas versões, é possível associar triggers a eventos do banco de dados, como uma inicialização (startup), permitindo executar tarefas de limpeza na inicialização, por exemplo | ||
** Aplicar regras a respeito de atividades de administração de uma maneira extremamente granular: pode-se usar triggers para controlar qual o tipo de alteração que se pode fazer em determinado objeto, como apagar (drop) ou alterar uma tabela. | ** Aplicar regras a respeito de atividades de administração de uma maneira extremamente granular: pode-se usar triggers para controlar qual o tipo de alteração que se pode fazer em determinado objeto, como apagar (drop) ou alterar uma tabela. | ||
<br> | <br> | ||
| Linha 15: | Linha 16: | ||
** DML (Data Manipulation Language): sempre que um evento do tipo insert, update ou delete ocorrer na tabela, o trigger será “disparado” | ** DML (Data Manipulation Language): sempre que um evento do tipo insert, update ou delete ocorrer na tabela, o trigger será “disparado” | ||
** DDL (Data Definition Language): o trigger será disparado sempre que um evento DDL ocorrer, como a criação de uma tabela. É muito útil para o caso de auditorias ou para evitar que certas operações sejam executadas | ** DDL (Data Definition Language): o trigger será disparado sempre que um evento DDL ocorrer, como a criação de uma tabela. É muito útil para o caso de auditorias ou para evitar que certas operações sejam executadas | ||
** Eventos do banco de dados: eventos como startup, shutdown, sempre que um usuário conectar-se ou desconectar-se e até mesmo sempre que um erro | ** Eventos do banco de dados: eventos como startup, shutdown, sempre que um usuário conectar-se ou desconectar-se e até mesmo sempre que um erro ocorrer em alguns SGBDs, o trigger será “disparado” | ||
** INSTEAD OF: Instead of (em vez de) triggers são uma ótima alternativa aos triggers de DML, pois eles são “disparados” quando um evento do tipo insert, update ou delete estão para acontecer. O código do trigger define o que deverá acontecer no lugar dos eventos. Este tipo de trigger controla operações em views, não em tabelas; | ** INSTEAD OF: Instead of (em vez de) triggers são uma ótima alternativa aos triggers de DML, pois eles são “disparados” quando um evento do tipo insert, update ou delete estão para acontecer. O código do trigger define o que deverá acontecer no lugar dos eventos. Este tipo de trigger controla operações em views, não em tabelas; | ||
<br> | |||
* Um Trigger padrão ocorre depois de algumas verificações do SQL, mas ainda podemos prevenir a ação que executou o Trigger se utilizarmos a instrução ROLLBACK, pois o SQL Server automaticamente inicia uma transação para instruções do tipo INSERT, UPDATE ou DELETE ( transação implícita ) | * Um Trigger padrão ocorre depois de algumas verificações do SQL, mas ainda podemos prevenir a ação que executou o Trigger se utilizarmos a instrução ROLLBACK, pois o SQL Server automaticamente inicia uma transação para instruções do tipo INSERT, UPDATE ou DELETE ( transação implícita ) | ||
* Supondo que tenhamos esta tabela criada em um banco | * Supondo que tenhamos esta tabela criada em um banco (Ex.: SQL Server): | ||
CREATE | CREATE | ||
| Linha 38: | Linha 30: | ||
COD INT | COD INT | ||
) | ) | ||
<br> | |||
Um Trigger de INSERT pode ser criado da seguinte maneira: | Um Trigger de INSERT pode ser criado da seguinte maneira: | ||
| Linha 50: | Linha 43: | ||
* FROM INSERTED | * FROM INSERTED | ||
GO | GO | ||
<br> | |||
* Dentro de um Trigger de INSERT podemos utilizar a tabela temporária INSERTED ( | * Dentro de um Trigger de INSERT podemos utilizar a tabela temporária INSERTED (criada somente durante o Trigger) para visualizarmos os dados que estão sendo inseridos. | ||
* Se utilizarmos esta instrução: | * Se utilizarmos esta instrução: | ||
INSERT INTO TESTE VALUES (1) | |||
* O Trigger será disparado e mostrará o valor 1 para o campo COD da tabela INSERTED. | * O Trigger será disparado e mostrará o valor 1 para o campo COD da tabela INSERTED. | ||
| Linha 105: | Linha 99: | ||
ROLLBACK | ROLLBACK | ||
GO | GO | ||
<br> | |||
* Dicas para Triggers: | * Dicas para Triggers: | ||
Edição das 18h06min de 26 de agosto de 2013
Triggers
- Triggers, ou gatilhos são stored procedures em PL/SQL ou Java executadas (disparadas) implicitamente
- Triggers facilitam o desenvolvimento de aplicações e a maioria dos BDs relacionais possui a técnica de Trigger que é utilizada para poder colocar uma determinada regra de negócio da aplicação
- Não possuem nenhum “chamamento” explícito, sempre que uma tabela ou view é modificada ou ainda quando acontece alguma determinada ação do usuário ou até mesmo ações do próprio banco de dados.
- Triggers são uma parte crítica de qualquer aplicação bem modelada e, através deles, é possível garantir as seguintes funcionalidades:
- Executar validações de alterações feitas em tabelas ou views: triggers oferecem uma forte garantia na validação de informações, pois esta validação está ligada diretamente ao objeto do banco de dados (tabela ou view)
- Automatizar manutenções no banco de dados: a partir de algumas versões, é possível associar triggers a eventos do banco de dados, como uma inicialização (startup), permitindo executar tarefas de limpeza na inicialização, por exemplo
- Aplicar regras a respeito de atividades de administração de uma maneira extremamente granular: pode-se usar triggers para controlar qual o tipo de alteração que se pode fazer em determinado objeto, como apagar (drop) ou alterar uma tabela.
- Tipos de eventos que podem “disparar” um trigger:
- DML (Data Manipulation Language): sempre que um evento do tipo insert, update ou delete ocorrer na tabela, o trigger será “disparado”
- DDL (Data Definition Language): o trigger será disparado sempre que um evento DDL ocorrer, como a criação de uma tabela. É muito útil para o caso de auditorias ou para evitar que certas operações sejam executadas
- Eventos do banco de dados: eventos como startup, shutdown, sempre que um usuário conectar-se ou desconectar-se e até mesmo sempre que um erro ocorrer em alguns SGBDs, o trigger será “disparado”
- INSTEAD OF: Instead of (em vez de) triggers são uma ótima alternativa aos triggers de DML, pois eles são “disparados” quando um evento do tipo insert, update ou delete estão para acontecer. O código do trigger define o que deverá acontecer no lugar dos eventos. Este tipo de trigger controla operações em views, não em tabelas;
- Um Trigger padrão ocorre depois de algumas verificações do SQL, mas ainda podemos prevenir a ação que executou o Trigger se utilizarmos a instrução ROLLBACK, pois o SQL Server automaticamente inicia uma transação para instruções do tipo INSERT, UPDATE ou DELETE ( transação implícita )
- Supondo que tenhamos esta tabela criada em um banco (Ex.: SQL Server):
CREATE TABLE DBO.TESTE ( COD INT )
Um Trigger de INSERT pode ser criado da seguinte maneira:
CREATE TRIGGER T_INCLUI ON TESTE FOR INSERT AS SELECT ‘DADOS A SEREM INSERIDOS:’ SELECT * FROM INSERTED GO
- Dentro de um Trigger de INSERT podemos utilizar a tabela temporária INSERTED (criada somente durante o Trigger) para visualizarmos os dados que estão sendo inseridos.
- Se utilizarmos esta instrução:
INSERT INTO TESTE VALUES (1)
- O Trigger será disparado e mostrará o valor 1 para o campo COD da tabela INSERTED.
- Um exemplo de um Trigger de DELETE:
CREATE TRIGGER T_APAGA ON TESTE FOR DELETE AS SELECT ‘DADOS A SEREM APAGADOS:’ SELECT * FROM DELETED GO
- Ao invés de utilizarmos a tabela temporário INSERTED utilizamos a tabela temporária chamada DELETED, com os dados que serão apagados.
- Um Trigger de UPDATE:
CREATE TRIGGER T_ALTERA ON TESTE FOR UPDATE AS SELECT ‘DADOS ANTIGOS:’ SELECT * FROM DELETED SELECT ‘DADOS NOVOS:’ SELECT * FROM INSERTED GO
- Temos duas tabelas temporárias: a tabela DELETED, com os valores antigos para o campo, e a tabela INSERTED com os novos valores para os campos da tabela.
- Supondo que para qualquer instrução INSERT, UPDATE ou DELETE efetuada sobre a tabela TESTE seja cancelada:
CREATE TRIGGER T_CANCELA ON TESTE FOR INSERT , UPDATE , DELETE AS
SELECT ‘CANCELANDO AÇÃO.’
ROLLBACK GO
- Dicas para Triggers:
- Pode-se ter mais de um Trigger do mesmo tipo para uma mesma tabela. A ordem de execução vai do que foi criado primeira até o último que foi criado.
- O encadeamente de Trigger (um Trigger chamado outro, ou a si mesmo) pode ocorrer, desde que seja habilitada uma opção do servidor. Por padrão esta opção é habilitada.
- Triggers nas regras de negócio devem ser usados sem abus. Para verificações mais simples, pode-se utilizar outros objetos do Banco de dados, como constraints
- Triggers podem ser utilizados para replicação (cópia dos dados). Por exemplo: a cada vez que o usuário inserir um dados, você insere em outra tabela.
- Triggers não podem ser chamados manualmente como Stored Procedures. Eles são chamados somente pela instrução determinada pelo tipo do Trigger.
- Existem os novos Trigger INSTEAD OF que funcionam um pouco diferente dos Triggers padrão. Eles substituem a instrução que os disparou.