SQL - Triggers


Se até agora você esta acostumado a trabalhar com banco de dados do tipo ISAM ( Dbase , FoxPro, Access , Paradox...); desenvolver uma aplicação para gerenciar os dados neste caso significa criar uma aplicação que faça o controle sobre todo ambiente desde a interface , passando pela manutenção dos dados e as regras de negócios do sistema.

É o sistema que deve controlar e tomar as decisões sobre o que fazer em determinadas situações. Assim em um programa para controlar os produtos de uma empresa quando a quantidade de um produto atingir uma certa quantidade o sistema deverá avisar o operador/usuário para providenciar a reposição do mesmo.

Ao trabalhar com base de dados Cliente/Servidor como SQL Server , Oracle , Informix , dentre outras, podemos usar um recurso muito poderoso chamado Trigger.

Um Trigger é bloco de comandos Transact-SQL que é automaticamente executado quando um comando INSERT , DELETE ou UPDATE for executado em uma tabela do banco de dados.

Os Triggers são usados para realizar tarefas relacionadas com validações , restrições de acesso , rotinas de segurança e consistência de dados ; desta forma estes controles deixam de ser executados pela aplicação e passam a ser executados pelos Triggers em determinadas situações :

A criação de um Trigger envolve duas etapas :

  1. Um comando SQL que vai disparar o Trigger ( INSERT , DELETE , UPDATE)
  2. A ação que o Trigger vai executar ( Geralmente um bloco de códigos SQL )

Como não poderia deixar de ser , existem certas limatações na utilização de um Trigger :

Como criar um Trigger

Podemos criar um Trigger usando o comando Create Trigger do SQL Server ou através do Enterprise Manager. A Sintaxe de um Trigger é a seguinte:

CREATE TRIGGER trigger_name 
ON { table | view } 
[ WITH ENCRYPTION ] 
{ 
    { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } 
        [ WITH APPEND ] 
        [ NOT FOR REPLICATION ] 
        AS 
        [ { IF UPDATE ( column ) 
            [ { AND | OR } UPDATE ( column ) ] 
                [ ...n ] 
        | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) 
                { comparison_operator } column_bitmask [ ...n ] 
        } ] 
        sql_statement [ ...n ] 
    } 
} 
  1. ON Table - a tabela para o qual o trigger esta sendo criado
  2. FOR - deve ser seguido do tipo de comando que acionam o trigger
  3. AFTER - determina que o trigger somente sera disparado quando todas as rotinas especificadas no comando de disparo forem executadas com sucesso
  4. INSTEAD OF - Determina que o trigger será executado ao invés do comando de disparo do mesmo.
  5. [ DELETE ] [INSERT] [UPDATE] - indicam o tipo de ação que deve disparar o trigger.

Quando você for criar um Trigger deverá definir :

  1. O nome
  2. A Tabela para o qual o Trigger irá ser criado
  3. Quando o Trigger deverá ser disparado
  4. Os comandos que determinam qual ação o Trigger deverá executar

Exemplo de Triggers:

1- O trigger abaixo será disparado quando alguém tentar incluir ou alterar dados na tabela Titles. Ele emite uma mensagem ao usuário. ( 50009 é uma mensagem definida para o usuário em sysmessages.)

USE pubs
IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'reminder' AND type = 'TR')
   DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE 
AS RAISERROR (50009, 16, 10)
GO

Criando um Trigger com o Enterprise Manager

Vamos ver agora como criar um trigger usando o Enterprise Manager :

figura 1 figura 2

- Agora clique com o botão direito do mouse sobre a tabela para a qual deseja criar o trigger e no menu selecione : All Tasks e a seguir Manage Triggers, conforme abaixo

- A janela Triggers Properties será exibida com a estrutura padrão de um trigger.Agora faça o seguinte :

- Vamos criar o trigger chamado teste que emitirá um aviso toda vez que um registro for incluido na tabela Tabela1. O desenho do nosso trigger deverá ficar assim:

- Verifique a sintaxe clicando em - Check Syntax e a seguir salve o trigger clicando no botão OK.

Vamos agora testar se o trigger esta funcionando. Abra o Query Analyzer e selecione o banco de dados para o qual criou o trigger e digite na janela a instrução SQL para incluir um registro . Veja que assim que o registro é incluido a mensagem - "Um registro foi incluido na tabela Tabela1" é exibido indicando que o nosso trigger esta funcionando.

Para alterar um trigger usamos o comando ALTER TRIGGER : ALTER TRIGGER nome_trigger

Para excluir um trigger usamos o comando DROP TRIGGER : DROP TRIGGER nome_trigger

Por enquanto é só isto.. Até a próxima...


José Carlos Macoratti