0% acharam este documento útil (0 voto)
92 visualizações8 páginas

Introdução a Triggers em SQL

1) Os triggers são blocos de código SQL que são executados automaticamente quando comandos de inserção, exclusão ou atualização são executados em uma tabela do banco de dados. 2) Os triggers podem ser usados para validações, restrições de acesso, rotinas de segurança e consistência de dados. 3) A criação de um trigger envolve definir o nome, a tabela, o evento disparador e as ações a serem executadas.

Enviado por

Gabriele Mafra
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
92 visualizações8 páginas

Introdução a Triggers em SQL

1) Os triggers são blocos de código SQL que são executados automaticamente quando comandos de inserção, exclusão ou atualização são executados em uma tabela do banco de dados. 2) Os triggers podem ser usados para validações, restrições de acesso, rotinas de segurança e consistência de dados. 3) A criação de um trigger envolve definir o nome, a tabela, o evento disparador e as ações a serem executadas.

Enviado por

Gabriele Mafra
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

SQL - Triggers

Se at agora voc esta acostumado a trabalhar com banco de dados do tipo ISAM ( Dbase , FoxPro, Access , Paradox...); desenvolver uma aplicao para gerenciar os dados neste caso significa criar uma aplicao que faa o controle sobre todo ambiente desde a interface , passando pela manuteno dos dados e as regras de negcios do sistema. o sistema que deve controlar e tomar as decises sobre o que fazer em determinadas situaes. 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/usurio para providenciar a reposio 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 so usados para realizar tarefas relacionadas com validaes , restries de acesso , rotinas de segurana e consistncia de dados ; desta forma estes controles deixam de ser executados pela aplicao e passam a ser executados pelos Triggers em determinadas situaes : Mecanismos de validao envolvendo mltiplas tabelas Criao de contudo de uma coluna derivada de outras colunas da tabela Realizar anlise e e atualizaes em outras tabelas com base em alteraes e/ou inclues da tabela atual

A criao de um Trigger envolve duas etapas :

1. 2.

Um comando SQL que vai disparar o Trigger ( INSERT , DELETE , UPDATE) A ao que o Trigger vai executar ( Geralmente um bloco de cdigos SQL )

Como no poderia deixar de ser , existem certas limataes na utilizao de um Trigger : No possivel criar um Trigger para uma viso O resultado da execuo de um Trigger retornado para a aplicao que o chamou. O comando WRITETEXT no ativa um Trigger O comando TRUNCATE TABLE no pode ser reconhecido por um Trigger No podemos usar em um Trigger os seguintes comandos SQL : ALTER DATABASE , ALTER TRIGGER , ALTER PROCEDURE , ALTER TABLE , ALTER VIEW . CREATE DATABASE , CREATE INDEX , CREATE PROCEDURE, CREATE SCHEMA, CREATE TABLE , DROP DATABASE, DROP TABLE , DROP PROCEDURE, DROP TRIGGER, DROP INDEX, GRANT , LOAD DATABASE, REVOKE, RESTORE DATABASE, TRUNCATE TABLE.

Como criar um Trigger

Podemos criar um Trigger usando o comando Create Trigger do SQL Server ou atravs 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 ] } }

a. b. c. d. e.

ON Table - a tabela para o qual o trigger esta sendo criado FOR - deve ser seguido do tipo de comando que acionam o trigger AFTER - determina que o trigger somente sera disparado quando todas as rotinas especificadas no comando de disparo forem executadas com sucesso INSTEAD OF - Determina que o trigger ser executado ao invs do comando de disparo do mesmo. [ DELETE ] [INSERT] [UPDATE] - indicam o tipo de ao que deve disparar o trigger.

Quando voc for criar um Trigger dever definir :

1. 2. 3. 4.

O nome A Tabela para o qual o Trigger ir ser criado Quando o Trigger dever ser disparado Os comandos que determinam qual ao o Trigger dever executar

Exemplo de Triggers: 1- O trigger abaixo ser disparado quando algum tentar incluir ou alterar dados na tabela Titles. Ele emite uma mensagem ao usurio. ( 50009 uma mensagem definida para o usurio 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 : Abra o Enterprise Manager e expanda o item banco de dados e a pasta onde esta a tabela que ser aberta. Clique com o boto direito do mouse no nome da tabela onde deseja criar o trigger e selecione no menu pop up a opo New Table Vamos criar a tabela tabela1 conforme a estrutura da figura 1. Na figura 2 temos a tabela j criada.

figura 1

figura 2

- Agora clique com o boto 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 padro de um [Link] faa o seguinte : Altere o contedo do colchete substituindo TRIGGER NAME pelo nome do trigger que esta criando

Na linha seguinte escolha o tipo de ao que ir disparar o trigger (INSERT, UPDATE, DELETE ) Abaixo da palavra AS informe a ao que o trigger ir realizar.

- 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 boto 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 instruo 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 prxima...

CREATE TRIGGER
Name
CREATE TRIGGER -- define um novo gatilho

Synopsis
CREATE TRIGGER nome { BEFORE | AFTER } { evento [OR ...] } ON tabela FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE funo ( argumentos )

Entradas
nome

O nome do novo gatilho.


tabela

O nome de uma tabela existente.


evento

Um entre INSERT, DELETE e UPDATE.


funo

Uma funo fornecida pelo usurio. Sadas


CREATE

Mensagem retornada se o gatilho for criado com sucesso.

Descrio
O comando CREATE TRIGGER introduz um novo gatilho no banco de dados atual. O gatilho fica associado com a relao tabela e executa a funo especificada funo. O gatilho pode ser especificado para disparar antes (BEFORE) da operao ser realizada na tupla (antes das restries serem verificadas e o INSERT, UPDATE ou DELETE serem efetuados) ou aps (AFTER) a operao ser realizada (ou seja, aps as restries serem verificadas e o INSERT, UPDATE ou DELETE ter completado). Se o gatilho disparar antes do evento, o gatilho pode evitar a operao para a tupla atual, ou modificar a tupla sendo inserida (para as operaes de INSERT e UPDATE somente). Se o gatilho disparar aps o evento todas as modificaes, incluindo a ltima insero, atualizao ou excluso, so "visveis" para o gatilho. O SELECT no modifica nenhuma linha, portanto no possvel criar gatilhos para SELECT. Regras e vises so mais apropriadas para este caso. Consulte os captulos sobre SPI (Interface de Programao do Servidor) e Gatilhos no Guia do Programador do PostgreSQL para obter mais informaes.

Notas
Para criar um gatilho em uma tabela, o usurio deve possuir o privilgio TRIGGER na tabela.

Na verso atual, gatilhos de declarao (STATEMENT triggers) no esto implementados. Consulte o comando DROP TRIGGER para obter informaes sobre como remover gatilhos.

Exemplos
Verificar se o cdigo do distribuidor existe na tabela de distribuidores antes de inserir ou atualizar uma linha da tabela filmes:
CREATE TRIGGER se_dist_existe BEFORE INSERT OR UPDATE ON filmes FOR EACH ROW EXECUTE PROCEDURE verificar_chave_primaria ('did', 'distribuidores', 'did');

Antes de remover um distribuidor, ou de atualizar o seu cdigo, remover todas as referncias para a tabela filmes:
CREATE TRIGGER se_filme_existe BEFORE DELETE OR UPDATE ON distribuidores FOR EACH ROW EXECUTE PROCEDURE verificar_chave_primaria (1, 'CASCADE', 'did', 'filmes', 'did');

O segundo exemplo tambm pode ser implementado usando uma chave estrangeira, como em:
CREATE TABLE distribuidores ( did DECIMAL(3), nome VARCHAR(40), CONSTRAINT se_filme_existe FOREIGN KEY(did) REFERENCES filmes ON UPDATE CASCADE ON DELETE CASCADE );

Compatibilidade
SQL92 No existe o comando CREATE SQL99 O comando CREATE TRIGGER do PostgreSQL implementa um subconjunto do padro SQL99. As seguintes funcionalidades esto faltando:
TRIGGER

no SQL92.

O SQL99 permite os gatilhos dispararem quando da atualizao de colunas especficas (por exemplo, AFTER UPDATE OF col1, col2). O SQL99 permite definir alis para as linhas ou tabelas "velha" e "nova" para uso na definio das aes do gatilho (por exemplo, CREATE TRIGGER ... ON nome_tabela
REFERENCING OLD ROW AS algum_nome NEW ROW AS outro_nome ...).

Como o PostgreSQL permite que os procedimentos dos gatilhos sejam escritos em qualquer linguagem definida pelo usurio, o acesso aos dados realizado na forma especfica da linguagem. O PostgreSQL somente possui gatilhos a nvel de linha, no possuindo gatilhos a nvel de declarao. O PostgreSQL somente permite a execuo de procedimentos armazenados para a ao do gatilho. O SQL99 permite a execuo de vrios outros comandos SQL, como o CREATE TABLE, para a ao de um gatilho. Esta limitao no difcil de ser contornada criando-se um procedimento armazenado que execute estes comandos.

Gatilho ou trigger um recurso de programao executado sempre que o evento associado ocorrer. Trigger um tipo especial de procedimento armazenado, que executado sempre que h uma tentativa de modificar os dados de uma tabela que protegida por ele. muito utilizada para ajudar a manter a consistncia dos dados ou para propagar alteraes em um determinado dado de uma tabela para outras. Um bom exemplo um gatilho criado para controle de quem alterou a tabela, nesse caso, quando a alterao for efetuada, o gatilho "disparado" e grava em uma tabela de histrico de alterao, o usurio e data/hora da alterao. Exemplo: (MS-SQL Server)
CREATE TRIGGER nome_do_gatilho ON dono.Nome_da_tabela FOR INSERT (ou UPDATE ou DELETE) AS Codigo para execucao [editar]

Você também pode gostar