Buscar

PRATICAS DE BANCO DE DADOS (Triggers)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 141 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 141 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 141 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

TRIGGERS (GATILHOS)
BY JOSÉ CARLOS VITORINO 3
TRIGGERS (GATILHOS)
•OBJETIVOS DA APRENDIZAGEM
• 1.CONHECER O CONCEITO DE TRIGGERS (GATILHOS).
• 2.CRIAR TRIGGERS (GATILHOS) DE DIFERENTES COMPLEXIDADES.
• 3.AVALIAR O FUNCIONAMENTO DE TRIGGERS (GATILHOS) E ENTENDER SUAS
APLICAÇÕES
BY JOSÉ CARLOS VITORINO 4
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
• ANTES DE DEFINIR O QUE É TRIGGER, VAMOS FAZER UMA LIGEIRA REVISÃO SOBRE
O MODELO DE ARQUITETURA DE DESENVOLVIMENTO EM CAMADAS.
• MODELO CENTRALIZADO
• MODELO CLIENT/SERVER
• MODELO EM 2 CAMADAS (2-TIER)
• MODELO EM 3 CAMADAS (3-TIER)
• MODEL EM N CAMADAS (N-TIER)
BY JOSÉ CARLOS VITORINO 5
TRIGGERS (GATILHOS)
BY JOSÉ CARLOS VITORINO 6
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•MODELO CLIENT /SERVER
• NASCEU NOS ANOS 70, NOS LABORATÓRIOS DA XEROX EM OPOSIÇÃO AO
MODELO DE COMPUTAÇÃO CENTRALIZADA
• O TERMO FOI CUNHADO EM 1978 EM UM ARTIGO PUBLICADO PELOS
CIENTISTA DA XEROX PARC, BASEADOS NA RFC 5 (ARPNET) QUE CRIOU OS
TERMOS SERVER-HOST OU USER-HOST
• PRECONIZAVA A PRESENÇA DE MÁQUINAS CLIENTES (ESTAÇÕES DE
TRABALHOS) E SERVIDORES
BY JOSÉ CARLOS VITORINO 7
TRIGGERS (GATILHOS)
M
O
D
E
L
O
C
L
I
E
N
T
/
S
E
R
V
E
R
BY JOSÉ CARLOS VITORINO 8
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•MODELO CAMADAS
• A ARQUITETURA EM CAMADAS PODE SER DEFINIDA COMO UM PROCESSO DE
DECOMPOSIÇÃO DE SISTEMAS COMPLEXOS EM CAMADAS PARA FACILITAR A
COMPREENSÃO E A MANUTENÇÃO DESTE SISTEMA.
• ESTA TÉCNICA FOI EMPRESTADA DA ARQUITETURA DE COMPUTADORES, QUE
UTILIZAM CAMADAS DE CHAMADA AO SISTEMA OPERACIONAL, DRIVERS E AFINS.
BY JOSÉ CARLOS VITORINO 9
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•MODELO CAMADAS
• 1974 – SNA DA IBM COM 7 CAMADAS
• 1975 – DEC, LANÇA O DECnet COM 2 CAMADAS
• 1978 – TCP/IP 2 CAMADAS SUBSTITUI A ARPANET
• VINTON CERF E ROBERT KAHN
• JON POSTEL
BY JOSÉ CARLOS VITORINO 10
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•MODELO EM 2 CAMADAS
• SURGIRAM NA DÉCADA DE 70
•MOTIVAÇÃO
• APROVEITAR MELHOR OS PC’s DA EMPRESA
• OFERECER SISTEMAS COM INTERFACES GRÁFICAS AMIGÁVEIS
• INTEGRAR O DESKTOP E OS DADOS CORPORATIVOS
• AUMENTAR A ESCALABILIDADE DE USO DE SISTEMAS DE INFORMAÇÃO
BY JOSÉ CARLOS VITORINO 11
TRIGGERS (GATILHOS)
•MODELO EM 2 CAMADAS
• CAMADA CLIENTE (FRONT END) / APRESENTAÇÃO
• TRATA A LÓGICA DE NEGÓCIOS E UI
• CAMADA SERVIDOR (BACK END) / ACESSO AOS DADOS
• TRATA OS DADOS (USANDO UM SGBD)
BY JOSÉ CARLOS VITORINO 12
TRIGGERS (GATILHOS)
•MODELO EM 3 CAMADAS
•DECADA DE 90
•MATURIDADE DA TECNOLOGIA DE BANCO DE DADOS ATIVO
• O SISTEMA DE BANCO DE DADOS ATIVO É UM SISTEMA DE BANCO DE
DADOS CAPAZ DE GERAR UMA DETERMINADA AÇÃO AUTOMATICAMENTE
SE DETECTAR UM EVENTO QUE ATENDA A DETERMINADAS CONDIÇÕES
BY JOSÉ CARLOS VITORINO 13
TRIGGERS (GATILHOS)
•MODELO EM 3 CAMADAS
•DECADA DE 90
• EVOLUÇÃO DA MODELO CLIENT/SERVER, CRIADA POR JOHN J. DANOVAN EM
1.992
• A ARQUITETURA DE TRÊS CAMADAS É UMA ARQUITETURA DE APLICATIVO DE
SOFTWARE BEM ESTABELECIDA QUE ORGANIZA OS APLICATIVOS EM TRÊS CAMADAS
DE COMPUTAÇÃO LÓGICA E FÍSICA
BY JOSÉ CARLOS VITORINO 14
TRIGGERS (GATILHOS)
M
O
D
E
L
O
E
M
3
C
A
M
A
D
A
S
BY JOSÉ CARLOS VITORINO 15
TRIGGERS (GATILHOS)
•MODELO EM 3 CAMADAS
• PROPÕEM AS SEGUINTES CAMADAS
• APRESENTAÇÃO (INTERFACE DO USUÁRIO)
• APLICATIVO (REGRAS DE NEGÓCIOS)
• ACESSO A DADOS (ARMAZENAMENTO DE DADOS NO COMPUTADOR)
BY JOSÉ CARLOS VITORINO 16
TRIGGERS (GATILHOS)
•MODELO EM 3 CAMADAS
• APRESENTAÇÃO (INTERFACE DO USUÁRIO)
• INTERFACE DO USUÁRIO E A CAMADA DE COMUNICAÇÃO DO APLICATIVO,
ONDE O USUÁRIO FINAL INTERAGE COM O APLICATIVO.
• SEU PRINCIPAL OBJETIVO É EXIBIR E COLETAR INFORMAÇÕES DO USUÁRIO.
• ESSA CAMADA DE NÍVEL SUPERIOR PODE SER EXECUTADA EM UM NAVEGADOR
DA WEB, COMO UM APLICATIVO DE DESKTOP OU UMA INTERFACE GRÁFICA
COM O USUÁRIO (GUI)
BY JOSÉ CARLOS VITORINO 17
TRIGGERS (GATILHOS)
•MODELO EM 3 CAMADAS
• APRESENTAÇÃO (INTERFACE DO USUÁRIO)
• POR EXEMPLO, AS CAMADAS DE APRESENTAÇÃO DA WEB GERALMENTE SÃO
DESENVOLVIDAS USANDO HTML, CSS E JAVASCRIPT.
• OS APLICATIVOS DE DESKTOP PODEM SER ESCRITOS EM UMA VARIEDADE DE
LINGUAGENS DE PROGRAMAÇÃO, DEPENDENDO DA PLATAFORMA.
BY JOSÉ CARLOS VITORINO 18
TRIGGERS (GATILHOS)
•MODELO EM 3 CAMADAS
•APLICATIVO (REGRAS DE NEGÓCIOS)
• A CAMADA DO APLICATIVO, TAMBÉM CONHECIDA COMO CAMADA LÓGICA OU
CAMADA INTERMEDIÁRIA OU CAMADA DE NEGÓCIOS, É O CORAÇÃO DO
APLICATIVO.
• NESTA CAMADA, AS INFORMAÇÕES COLETADAS NA CAMADA DE
APRESENTAÇÃO SÃO PROCESSADAS - ÀS VEZES EM RELAÇÃO A OUTRAS
INFORMAÇÕES NA CAMADA DE DADOS - USANDO A LÓGICA DE NEGÓCIOS,
UM CONJUNTO ESPECÍFICO DE REGRAS DE NEGÓCIOS.
BY JOSÉ CARLOS VITORINO 19
TRIGGERS (GATILHOS)
•MODELO EM 3 CAMADAS
•APLICATIVO (REGRAS DE NEGÓCIOS)
•A CAMADA DE APLICATIVO TAMBÉM PODE ADICIONAR,
EXCLUIR OU MODIFICAR DADOS NA CAMADA DE DADOS.
•A CAMADA DE APLICATIVO É NORMALMENTE DESENVOLVIDA
USANDO PYTHON, JAVA, PERL, PHP OU RUBY E SE COMUNICA
COM A CAMADA DE DADOS USANDO CHAMADAS DE API
BY JOSÉ CARLOS VITORINO 20
https://www.ibm.com/cloud/learn/api
TRIGGERS (GATILHOS)
•MODELO EM 3 CAMADAS
• ACESSO A DADOS (ARMAZENAMENTO DE DADOS NO COMPUTADOR)
• A CAMADA DE ACESSO A DADOS, ÀS VEZES CHAMADA DE CAMADA DE BANCO DE
DADOS, CAMADA DE DADOS OU BACK-END, É ONDE AS INFORMAÇÕES PROCESSADAS
PELO APLICATIVO SÃO ARMAZENADAS E GERENCIADAS.
• PODE SER UM SISTEMA DE GERENCIAMENTO DE BANCO DE DADOS RELACIONAL ,
COMO POSTGRESQL , MYSQL, MARIADB, ORACLE, DB2, INFORMIX OU SQL SERVER, OU
EM UM SERVIDOR DE BANCO DE DADOS NOSQL , COMO
CASSANDRA, COUCHDB OU MONGODB .
BY JOSÉ CARLOS VITORINO 21
TRIGGERS (GATILHOS)
•MODELO EM 3 CAMADAS
•ACESSO A DADOS (ARMAZENAMENTO DE DADOS NO COMPUTADOR)
• EM UM APLICATIVO DE TRÊS CAMADAS, TODA A COMUNICAÇÃO PASSA 
PELA CAMADA DO APLICATIVO.
•A CAMADA DE APRESENTAÇÃO E A CAMADA DE DADOS NÃO PODEM SE 
COMUNICAR DIRETAMENTE UMA COM A OUTRA.
BY JOSÉ CARLOS VITORINO 22
TRIGGERS (GATILHOS)
•MODELO EM n CAMADAS (MULTICAMADAS)
•MOTIVAÇÃO
• EXPLOSÃO DA COMPUTAÇÃO MÓVEL
• 5 BILHÕES DE DISPOSITIVOS MÓVEIS
• 29 BILHÕES DE DISPOSITIVOS DE REDES
• COMPUTAÇÃO EM NUVEM
• EDGE COMPUTING
BY JOSÉ CARLOS VITORINO 23
TRIGGERS (GATILHOS)
•MODELO EM n CAMADAS (MULTICAMADAS)
BY JOSÉ CARLOS VITORINO 24
TRIGGERS (GATILHOS)
•GENERALIZAÇÃO DO MODELO n CAMADAS
•MODELO EM 4 CAMADAS
• CAMADA DE APRESENTAÇÃO (PRESENTATION LAYER)
• CAMADA DE APRESENTAÇÃO (PL): ESTÁ LOCALIZADA NA CAMADA MAIS EXTERNA;
• SUAS FUNÇÕES SÃO: RECEBER DADOS INSERIDOS; INTERPRETAR INSTRUÇÕES
DOS USUÁRIOS E ENVIAR SOLICITAÇÕES À CAMADA DE SERVIÇOS DE DADOS E
EXIBIR OS DADOS OBTIDOS DA CAMADA DE SERVIÇOS DE DADOS .
• É MAIS PRÓXIMA DOS USUÁRIOS E FORNECE UMA INTERFACE DE OPERAÇÃO
INTERATIVA.
BY JOSÉ CARLOS VITORINO 25
TRIGGERS (GATILHOS)
• GENERALIZAÇÃO DO MODELO n CAMADAS
•MODELO EM 4 CAMADAS
• CAMADA DE SERVIÇO DE DADOS (DSL - DATA SERVICE LAYER)
• FICA ENTRE A CAMADA DE APRESENTAÇÃO E A CAMADA DE LÓGICA DE
NEGÓCIOS (BLL)
• COMO CAMADA DE ISOLAMENTO, VAI SEPARAR A LÓGICA DE NEGÓCIO DO
CLIENTE, DE FORMA A GARANTIR A SEGURANÇA DAS INFORMAÇÕES. DE
ACORDO COM AS NECESSIDADES DE CADA MÓDULO,
• ENCAPSULA A LÓGICA DE NEGÓCIOS EM ALTO NÍVEL.
BY JOSÉ CARLOS VITORINO 26
TRIGGERS (GATILHOS)
•GENERALIZAÇÃO DO MODELO n CAMADAS
•MODELO EM 4 CAMADAS
• CAMADA DE LÓGICA DE NEGÓCIOS (BLL - BUSINESS LOGIC LAYER)
• SITUA-SE ENTRE A PL E A CAMADA DE ACESSO A DADOS, DESEMPENHA UM PAPEL DE CONEXÃO
NA TROCA DE DADOS.
• A CAMADA DE LÓGICA DE NEGÓCIOS É RESPONSÁVEL PELOS VÁRIOS TIPOS DE OPERAÇÕES DE
NEGÓCIOS DO SISTEMA.
• AS PREOCUPAÇÕES DA CAMADA ESTÃO FOCADAS PRINCIPALMENTE NO DESENVOLVIMENTO DE
REGRAS DE NEGÓCIOS, PROCESSOS DE NEGÓCIOS E SISTEMA RELACIONADO ÀS NECESSIDADES DE
NEGÓCIOS,
BY JOSÉ CARLOS VITORINO 27
TRIGGERS (GATILHOS)
• GENERALIZAÇÃO DO MODELO n CAMADAS
•MODELO EM 4 CAMADAS
• CAMADA DE SERVIÇO DE DADOS (DSL - DATA SERVICE LAYER)
• A PRINCIPAL FUNÇÃO DA DSL É TRANSFERIR OS DADOS
PROCESSADOS ​​PELA BLL PARA A CAMADA IMEDIATAMENTESUPERIOR PL
OU TRANSFERIR OS DADOS ENVIADOS PELA PL PARA A CAMADA
DIRETAMENTE ABAIXO QUE É A BLL DE ACORDO COM AS DEFINIÇÕES DO
MODELO ESPECIFICADO.
BY JOSÉ CARLOS VITORINO 28
TRIGGERS (GATILHOS)
• GENERALIZAÇÃO DO MODELO n CAMADAS
•MODELO EM 4 CAMADAS
• CAMADA DE ACESSO A DADOS (DAL - DATA ACCESS LAYER)
• ESTÁ LOCALIZADA NA CAMADA MAIS INTERNA QUE IMPLEMENTA A LÓGICA
DE PERSISTÊNCIA.
• A FUNÇÃO DESTA CAMADA É RESPONSÁVEL PELO ACESSO AO BANCO DE
DADOS;
• É POSSÍVEL ACESSAR O SISTEMA DE BANCO DE DADOS, ARQUIVOS
BINÁRIOS, DOCUMENTOS DE TEXTO OU DOCUMENTO XML.
BY JOSÉ CARLOS VITORINO 29
TRIGGERS (GATILHOS)
•GENERALIZAÇÃO DO MODELO n CAMADAS
•MODELO EM 4 CAMADAS (FLUXO)
BY JOSÉ CARLOS VITORINO 30
TRIGGERS (GATILHOS)
• GENERALIZAÇÃO DO MODELO n CAMADAS
•MODELO EM 4 CAMADAS
• CAMADA DE ACESSO A DADOS (DAL - DATA ACCESS LAYER)
• ESTE NÍVEL FUNCIONA DE FORMA INDEPENDENTE DE OUTRAS CAMADAS.
• DE ACORDO COM AS SOLICITAÇÕES DA CAMADA SUPERIOR, A DAL EXTRAI OS DADOS
APROPRIADOS DO BANCO DE DADOS E PASSA OS DADOS PARA A CAMADA SUPERIOR.
• A DAL TAMBÉM FAZ AS OPERAÇÕES CRUD (CREATE, READ, UPDATE, DELETE) NOS
DADOS DA BASE DE DADOS DE ACORDO COM AS INSTRUÇÕES DA CAMADA SUPERIOR.
BY JOSÉ CARLOS VITORINO 31
TRIGGERS (GATILHOS)
•GENERALIZAÇÃO DO MODELO n CAMADAS
•VANTAGENS DO MODELO
• SEPARAÇÃO LÓGICA E FÍSICA DA FUNCIONALIDADE
• CADA CAMADA PODE SER EXECUTADA EM SISTEMAS OPERACIONAIS E
PLATAFORMAS DE SERVIDOR SEPARADAS
• CADA CAMADA É EXECUTADA EM PELO MENOS UM HARDWARE DE SERVIDOR
DEDICADO OU SERVIDOR VIRTUAL
BY JOSÉ CARLOS VITORINO 32
TRIGGERS (GATILHOS)
•GENERALIZAÇÃO DO MODELO n CAMADAS
•VANTAGENS DO MODELO
•DESENVOLVIMENTO MAIS RÁPIDO : COMO CADA CAMADA PODE SER
DESENVOLVIDA SIMULTANEAMENTE POR EQUIPES DIFERENTES, UMA
ORGANIZAÇÃO PODE LEVAR O APLICATIVO AO MERCADO COM MAIS RAPIDEZ E
OS PROGRAMADORES PODEM USAR AS MELHORES E MAIS RECENTES
LINGUAGENS E FERRAMENTAS PARA CADA CAMADA.
BY JOSÉ CARLOS VITORINO 33
TRIGGERS (GATILHOS)
•GENERALIZAÇÃO DO MODELO n CAMADAS
•VANTAGENS DO MODELO
• ESCALABILIDADE APRIMORADA : QUALQUER CAMADA PODE SER
DIMENSIONADA INDEPENDENTEMENTE DAS OUTRAS, CONFORME NECESSÁRIO.
BY JOSÉ CARLOS VITORINO 34
TRIGGERS (GATILHOS)
•GENERALIZAÇÃO DO MODELO n CAMADAS
•VANTAGENS DO MODELO
•MAIOR CONFIABILIDADE : UMA INTERRUPÇÃO EM UMA CAMADA TEM
MENOS PROBABILIDADE DE AFETAR A DISPONIBILIDADE OU O
DESEMPENHO DAS OUTRAS CAMADAS.
BY JOSÉ CARLOS VITORINO 35
TRIGGERS (GATILHOS)
•GENERALIZAÇÃO DO MODELO n CAMADAS
•VANTAGENS DO MODELO
• SEGURANÇA APRIMORADA : COMO A CAMADA DE APRESENTAÇÃO E A
CAMADA DE DADOS NÃO PODEM SE COMUNICAR DIRETAMENTE, UMA
CAMADA DE APLICATIVO BEM PROJETADA PODE FUNCIONAR COMO
UMA ESPÉCIE DE FIREWALL INTERNO, EVITANDO INJEÇÕES DE SQL E
OUTRAS EXPLORAÇÕES MALICIOSAS.
BY JOSÉ CARLOS VITORINO 36
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
BY JOSÉ CARLOS VITORINO 37
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•O TERMO TRIGGER (TRIGGER EM PORTUGUÊS) DEFINE UMA ESTRUTURA DO
BANCO DE DADOS QUE FUNCIONA, COMO O NOME SUGERE, COMO UMA
FUNÇÃO QUE É DISPARADA MEDIANTE ALGUMA AÇÃO.
•GERALMENTE ESSAS AÇÕES QUE DISPARAM OS TRIGGERS SÃO ALTERAÇÕES
NAS TABELAS POR MEIO DE OPERAÇÕES DE INSERÇÃO, EXCLUSÃO E
ATUALIZAÇÃO DE DADOS (INSERT, DELETE E UPDATE).
BY JOSÉ CARLOS VITORINO 38
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
• UM TRIGGER ESTÁ INTIMAMENTE RELACIONADO A UMA TABELA, SEMPRE QUE
UMA DAS AÇÕES INSERT, UPDATE E DELETE É EFETUADA SOBRE ESSA TABELA, É
POSSÍVEL DISPARÁ-LO PARA EXECUTAR ALGUMA TAREFA.
BY JOSÉ CARLOS VITORINO 39
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
• É UMA FEATURE DESEJADA NAS PRIMEIRAS VERSÕES DO SQL ANSI/ISO E
IMPLEMENTADA NA VERSÃO SQL/ISO 1999 (SQL 3) E NAS VERSÕES ATUAIS.
• PORTANTO, ESTÁ PRESENTE EM TODOS OS SGBD’s DO MERCADO
• CONTUDO, APESAR DA PADRONIZAÇÃO, CADA EMPRESA DESENVOLVEDORA
DE SGBD TEM UMA SINTAXE DIFERENTE.
BY JOSÉ CARLOS VITORINO 40
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•DUAS EXIGÊNCIAS DEVEM SER SATISFEITAS PARA QUE UM TRIGGER OCORRA:
• 1) CONDIÇÕES SOB AS QUAIS O TRIGGER DEVE SER EXECUTADO;
• 2) AÇÕES QUE SERÃO TOMADAS QUANDO UM TRIGGER FOR DISPARADO
BY JOSÉ CARLOS VITORINO 41
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•MOTIVAÇÕES:
• VERIFICAÇÃO DA CONFORMIDADE DAS REGRAS DE NEGÓCIOS DA EMPRESA;
•MANUTENÇÃO DA CONSISTÊNCIA E INTEGRIDADE DO BANCO DE DADOS;
•MONITORAMENTO DE ATUALIZAÇÃO DO BANCO DE DADOS;
•MANUTENÇÃO DE VIEWS, CONTROLE DE ACESSO, GERENCIAMENTO DE
VERSÕES;
BY JOSÉ CARLOS VITORINO 42
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•MOTIVAÇÕES:
• PROTEÇÃO CONTRA OPERAÇÕES MAL-INTENCIONADAS OU INCORRETAS
DO TIPO INSERT, UPDATE, E DELETE
•DESABILITAÇÃO OU REVERSÃO DE ALTERAÇÕES QUE VIOLAM A
INTEGRIDADE REFERENCIAL, CANCELANDO ASSIM A TENTATIVA DE
MODIFICAÇÃO DE DADOS
BY JOSÉ CARLOS VITORINO 43
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•MOTIVAÇÕES:
• SEGURANÇA: QUANDO UMA OPERAÇÃO É REALIZADA SOBRE UMA
ENTIDADE SENSÍVEL, O TRIGGER É DISPARADO PARA VERIFICAR SE ESTA
OPERAÇÃO É PERMITIDA AO USUÁRIO
•AUDITORIA: TRIGGERS PODEM INCLUIR REGISTROS EM TABELAS DE
AUDITORIA PARA REGISTRAR TODAS AS OPERAÇÕES IMPORTANTES
SOBRE AS TABELAS
BY JOSÉ CARLOS VITORINO 44
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•MOTIVAÇÕES:
• REPLICAÇÃO DE DADOS: MUITOS DESENVOLVEDORES DE SGBD’S TEM
IMPLEMENTADO REPLICADORES USANDO TRIGGER COMO MECANISMO
DE GRAVAÇÃO.
BY JOSÉ CARLOS VITORINO 45
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•REGRAS DE TRIGGERS:
• SÃO DESCRIÇÕES DE COMPORTAMENTO A SEREM ADOTADAS POR UM
SISTEMA. AS REGRAS ESTÃO GERALMENTE BASEADAS EM TRÊS
COMPONENTES NOMEADOS DE ECA:
• EVENTO;
• CONDIÇÃO; E
• AÇÃO
BY JOSÉ CARLOS VITORINO 46
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•REGRAS ECA:
• EVENTO.
• É UM INDICADOR DA OCORRÊNCIA DE UMA DETERMINADA SITUAÇÃO (QUANDO
AVALIAR). COMO É MOSTRADO NA FIGURA EXISTEM BASICAMENTE TRÊS TIPOS DE
EVENTOS:
• TEMPORAIS (ÀS 8:30, REPETIDAS VEZES TODA SEXTA ÀS 10:00),
• DEFINIDOS PELO USUÁRIO (ALTA TEMPERATURA, USER-LOGIN, ETC.), E
• OPERAÇÕES PRÓPRIAS DE ATUALIZAÇÃO DO BD (INSERT, DELETE, UPDATE, SELECT).
BY JOSÉ CARLOS VITORINO 47
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•REGRAS ECA:
• EVENTO.
BY JOSÉ CARLOS VITORINO 48
Eventos Temporais
Eventos Usuário
Ações
Eventos do BD
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•REGRAS ECA:
• CONDIÇÃO
• É UM PREDICADO SOBRE O ESTADO DO BANCO DE DADOS (O QUE
AVALIAR).
• É A CONDIÇÃO QUE DETERMINA SE A AÇÃO DA REGRA DEVE SER
EXECUTADA.
• CONDIÇÕES SÃO COMUMENTE IMPLEMENTADAS POR CONSULTAS OU
POR PROCEDIMENTOS DA APLICAÇÃO
BY JOSÉ CARLOS VITORINO 49
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•REGRAS ECA:
•AÇÃO
• É NORMALMENTE UMA SEQUÊNCIA DE DECLARAÇÕES SQL, MAS TAMBÉM
PODERIA SER UMA TRANSAÇÃO DO BANCO DE DADOS OU UMA
APLICAÇÃO,
• É UM CONJUNTO DE OPERAÇÕES A SER EXECUTADA QUANDO UM
DETERMINADO EVENTO OCORRE E A CONDIÇÃO ASSOCIADA É AVALIADA
COMO VERDADEIRA (COMO RESPONDER).
BY JOSÉ CARLOS VITORINO 50
TRIGGERS (GATILHOS)
•O QUE É TRIGGER ?
•REGRAS ECA:
• AÇÃO
• UM EVENTO PODE DISPARAR UMA OU MAIS REGRAS.
• AS AÇÕES TÍPICAS SÃO:
• OPERAÇÕES DE MODIFICAÇÃO OU CONSULTA;
• COMANDO DO BD (COMMIT, ROLLBACK); OU
• PROCEDIMENTOS DA APLICAÇÃO (PODENDO OU NÃO ACESSAR O BD).
BY JOSÉ CARLOS VITORINO 51
TRIGGERS (GATILHOS) / SQL ISO/IEC 9075-2:2016
BY JOSÉ CARLOS VITORINO 52
TRIGGERS (GATILHOS)
•TRIGGER SQL ISO/IEC 9075-2:2016
BY JOSÉ CARLOS VITORINO 53
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
CREATE comando para criação do trigger
trigger name Especifica o nome da trigger que está sendo criada
trigger action time Especifica quando a ação será disparada: BEFORE, AFTER, INSTEAD OF
trigger event Define qua o evento disparará o trigger: DELETE, INSERT UPDATE
table name Nome da tabela que será afetada
TRIGGERS (GATILHOS)
•TRIGGER SQL ISO/IEC 9075-2:2016
BY JOSÉ CARLOS VITORINO 54
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
transition table Tabelas de transição são tabelas temporárias alocadas na memória
OLD TABLE: Especificao nome de uma tabela temporária que identifica
os valores no conjunto completo de linhas afetadas antes do disparo de
eventos SQL. A OLD TABLE inclui as linhas que foram afetadas pelo
trigger se a ativação atual do trigger foi causada por instruções
no corpo do trigger. Se o evento de trigger for INSERT, a tabela
temporária está vazia.
TRIGGERS (GATILHOS)
•TRIGGER SQL ISO/IEC 9075-2:2016
BY JOSÉ CARLOS VITORINO 55
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
transition table NEW TABLE: Especifica o nome de uma tabela temporária que identifica
o estado do conjunto completo de linhas afetadas, conforme operação
SQL e por qualquer instrução SET em um trigger anterior que já foi
executado.
Se o evento de disparo for DELETE, a tabela temporária está vazia.
TRIGGERS (GATILHOS)
•TRIGGER SQL ISO/IEC 9075-2:2016
BY JOSÉ CARLOS VITORINO 56
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
variable list Lista de variáveis são arrays alocadas na memórias contendo valores de
linhas das tabelas
OLD ROW AS: Especifica o nome do array que contém os valores da
linha da tabela antes que o EVENTO disparado tenha efeito.
Se o evento que disparou o triggers for um INSERT os valores de cada
coluna no array OLD ROW é NULL
NEW ROW AS: Especifica o nome do array que contém os valores
MODIFICADOS da linha da tabela após o EVENTO disparado.
Se o evento que disparou o trigger for um DELETE, o valor para cada
coluna do array NEW ROW é NULL
TRIGGERS (GATILHOS)
•TRIGGER SQL ISO/IEC 9075-2:2016
BY JOSÉ CARLOS VITORINO 57
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
WHEN <left paren> Especifica as condições para que o trigger seja executado.
BEGIN ATOMIC 
{ <SQL statement>}
END
Define que as instruções seguintes devem ser executadas como um
ÚNICA instruções composta.
TRIGGERS (GATILHOS) / NO ORACLE
CREATE [ OR REPLACE ] TRIGGER [schema].trigger
{ BEFORE | AFTER | INSTEAD OF }
{ dml_event_clause | { ddl_event [ OR ddl_event ]... | database_event
[ or database_event ]...} ON { [ schema.] SCHEMA | DATABASE } }
[ WHEN (condition) ]
{ pl/sql_block | call_procedure_statement } ;
BY JOSÉ CARLOS VITORINO 58
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 59
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
CREATE comando para criação do trigger
OR REPLACE utilizado para recriar o trigger se ele já existir ou para alterar a definição de
um trigger existente sem primeiro eliminá-lo
trigger Especifica o nome da trigger que está sendo criada
Se um trigger produzir erros de compilação, ele ainda será criado, mas
falhará na execução. Isso significa que ele bloqueia efetivamente todas as
instruções DML de disparo até que seja desativado, substituído por uma
versão sem erros de compilação ou eliminado.
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 60
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
BEFORE Especifique BEFORE para fazer com que o banco de dados dispare o trigger
antes de executar o evento de trigger.
Para triggers de linha, o trigger é disparado antes de cada linha afetada ser
alterada.
Restrições nos triggers BEFORE estão sujeitos às seguintes restrições:
• Você NÃO pode especificar um trigger BEFORE em uma view ou catalog
view.
• Você pode alterar para o valor: NEW, mas não para o valor: OLD.
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 61
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
AFTER Especifique AFTER para fazer com que o banco de dados dispare o trigger
depois de executar o evento de trigger.
Para triggers de linha, o trigger é disparado após cada linha afetada ser
alterada.
Restrições nos triggers AFTER estão sujeitos às seguintes restrições:
• Não é possível especificar um trigger AFTER em uma view de tabelas ou
catalog view.
• Você não pode gravar o valor: OLD ou: NEW.
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 62
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
INSTEAD OF Especifique INSTEAD OF para fazer com que o banco de dados Oracle
dispare o trigger em vez de executar o evento de trigger.
Os triggers INSTEAD OF são válidos para eventos DML em views. Eles não
são válidos para DDL ou eventos de banco de dados.
Se uma view for inerentemente atualizável e tiver triggers INSTEAD OF, os
triggers terão preferência. Em outras palavras, o banco de dados dispara os
triggers em vez de executar DML na view.
Se a view pertencer a uma hierarquia, o trigger não será herdado por
subvisualizações.
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 63
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
INSTEAD OF • Os triggers INSTEAD OF são válidos apenas para views. Você não pode
especificar um trigger INSTEAD OF em uma tabela.
• Você pode ler os valores: OLD e: NEW, mas não pode gravar os valores: OLD ou:
NEW.
Observação:
Você pode criar vários triggers do mesmo tipo (BEFORE, AFTER ou INSTEAD OF)
que disparam para a mesma instrução na mesma tabela.
A ordem em que o Oracle Database dispara esses triggers é indeterminada. Se o
seu aplicativo requer que um trigger seja disparado antes de outro do mesmo
tipo para a mesma instrução, combine esses triggers em um único trigger cuja
ação de trigger executa as ações dos triggers originais na ordem apropriada.
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 64
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
DML_event_clause permite que você especifique uma das três instruções DML que podem
fazer com que o TRIGGER seja disparado.
DELETE Especifique DELETE se desejar que o banco de dados dispare o TRIGGER
sempre que uma instrução DELETE remover uma linha da tabela ou
remover um elemento de uma tabela aninhada.
INSERT Especifique INSERT se desejar que o banco de dados dispare o TRIGGER
sempre que uma instrução INSERT adicionar uma linha a uma tabela ou
adicionar um elemento a uma tabela aninhada
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 65
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
UPDATE Especifique UPDATE se desejar que o banco de dados dispare o trigger
sempre que uma instrução UPDATE alterar um valor em uma das
colunas especificadas após OF. Se você omitir OF, o banco de dados
dispara o trigger sempre que uma instrução UPDATE altera um valor em
qualquer coluna da tabela ou tabela aninhada.
ddl_event Especifique um ou mais tipos de instruções DDL que podem fazer com
que o trigger seja disparado. Você pode criar triggers para esses
eventos em DATABASE ou SCHEMA, a menos que seja indicado de
outra forma. Você pode criar triggers BEFORE e AFTER para esses
eventos. O banco de dados Oracle dispara o trigger na transação do
usuário existente.
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 66
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
database_event Especifique um ou mais estados específicos do banco de dados que
podem fazer com que o TRIGGER seja disparado.
Você pode criar TRIGGERs para esses eventos em DATABASE ou
SCHEMA, a menos que seja indicado de outra forma.
Para cada um desses eventos de disparo, o banco de dados Oracle abre
um escopo de transação autônomo, dispara o TRIGGER e confirma
qualquer transação separada (independentemente de qualquer
transação de usuário existente).
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 67
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
WHEN Clause Especifique a condição do trigger, que é uma condição SQL que deve
ser satisfeita para que o banco de dados dispare o trigger.
pl/sql_block Especifique o bloco PL / SQL que o banco de dados Oracle executará
para disparar o trigger.
O bloco PL / SQL de um trigger de banco de dados pode conter uma de
uma série de funções integradas no esquema SYS projetadas
exclusivamente para extrair atributos de eventos do sistema. Essas
funções podem ser usadas apenas no bloco PL / SQL de um trigger de
banco de dados.
TRIGGERS(GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 68
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
pl/sql_block Restrições na implementação do trigger
A implementação de um trigger está sujeita às seguintes restrições:
O bloco PL / SQL de um trigger não pode conter instruções SQL de
controle de transação (COMMIT, ROLLBACK, SAVEPOINT e SET
CONSTRAINT) se o bloco for executado na mesma transação.
Você pode fazer referência e usar colunas LOB na ação do trigger
dentro do bloco PL / SQL. Você pode modificar os valores: NEW,
mas não os valores: OLD das colunas LOB na ação do trigger.
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 69
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
call_procedure_statement O call_procedure_statement permite chamar um stored
procedure em vez de especificar o código do trigger embutido
como um bloco PL/SQL. A sintaxe desta instrução é a mesma
para CALL, com as seguintes exceções:
Você não pode especificar a cláusula INTO de CALL, porque ela
se aplica apenas a funções.
Você não pode especificar variáveis de ligação em expr.
Para fazer referência a colunas de tabelas nas quais o trigger
está sendo definido, você deve especificar: NEW e: OLD.
TRIGGERS (GATILHOS)
EXEMPLO DE 
TRIGGER ORACLE
BY JOSÉ CARLOS VITORINO 70
TRIGGERS (GATILHOS) / NO IBM-DB2
CREATE [ OR REPLACE ] TRIGGER trigger-name
[NO CASCADE] { AFTER | BEFORE | INSTEAD OF } trigger_event
INSERT OR DELETE OR UPDATE OF column-name
ON { table_name | view_name }
REFERENCING { OLD AS | NEW AS | OLD TABLE AS | NEW TABLE AS }
{ correlation_name | identifier }
{ FOR EACH ROW | FOR EACH STATEMENT }
triggered_actions;
WHEN
SQL-procedure-statement
BY JOSÉ CARLOS VITORINO 71
TRIGGERS (GATILHOS)
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 72
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
CREATE comando para criação do trigger
OR REPLACE Especifica a substituição da definição do trigger, se houver no servidor atual. A
definição existente é efetivamente eliminada antes que a nova definição seja
substituída no catálogo. Esta opção será ignorada se uma definição para o
trigger não existir no servidor atual. Esta opção pode ser especificada apenas
pelo proprietário do objeto.
trigger-name Nomeia o trigger. O nome, incluindo o nome do esquema implícito ou
explícito, não deve identificar um trigger já descrito no catálogo (SQLSTATE
42710). Se um nome de duas partes for especificado, o nome do esquema não
pode começar com SYS (SQLSTATE 42939).
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 73
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
NO CASCADE Quando declarado evita que uma trigger dispare outras triggers
BEFORE Especifica que a ação disparada associada deve ser aplicada antes
(BEFORE) que quaisquer alterações causadas pela atualização real da tabela
sejam aplicadas ao banco de dados.
AFTER Especifica que a ação disparada associada deve ser aplicada após (AFTER)
as alterações causadas pela atualização real da tabelas seja, aplicadas ao
banco de dados.
INSTEAD OF Especifica que a ação disparada associada substitui a ação na view. Apenas
um trigger INSTEAD OF é permitido para cada tipo de operação em uma
determinada view.
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 74
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
trigger-event Especifica que a ação disparada associada ao trigger deve ser executada
sempre que um dos eventos for aplicado à tabela ou view. Qualquer
combinação de eventos pode ser especificada, mas cada evento (INSERT,
DELETE e UPDATE) só pode ser especificado uma vez.
Se vários eventos forem especificados, a ação disparada deve ser uma
instrução SQL composta (compilada).
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 75
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
INSERT Especifica que a ação disparada associada ao trigger deve ser executada
sempre que uma operação INSERT for aplicada à tabela ou view.
DELETE Especifica que a ação disparada associada ao trigger deve ser executada
sempre que uma operação DELETE for aplicada à tabela ou view.
UPDATE Especifica que a ação disparada associada ao trigger deve ser executada
sempre que uma operação UPDATE for aplicada à tabela ou view, sujeita às
colunas especificadas ou implícitas. Se a lista opcional de nome de
coluna não for especificada, todas as colunas da tabela ou view estarão
implícitas. Portanto, a omissão da lista de nome de coluna implica que o
trigger será ativado pela atualização de qualquer coluna da tabela ou view.
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 76
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
OF column-name Cada nome de coluna especificada deve ser uma coluna da tabela base
Se o trigger for um trigger BEFORE, o nome da coluna especificada não
pode ser uma coluna gerada diferente da coluna de identidade.
Nenhum nome de coluna pode aparecer mais de uma vez na lista
de nomes de coluna. O trigger só será ativado pela atualização de uma
coluna que seja identificada na lista de nome de coluna . Esta cláusula
não pode ser especificada para um trigger INSTEAD OF.
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 77
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
ON table-name Designa a tabela de assunto da definição do trigger BEFORE ou
AFTER. O nome deve especificar uma tabela base ou um alias que
resolva em uma tabela base. O nome não deve especificar uma tabela
de catálogo, uma tabela de consulta materializada, uma tabela
temporária criada, uma tabela temporária declarada ou um apelido
(ALIAS)
ON view-name Designa a view do assunto da definição do trigger INSTEAD OF. O
nome deve especificar uma view sem tipo ou um alias que resolva para
uma view sem tipo sem colunas do tipo XML. O nome não deve
especificar uma view de catálogo, uma view que é definida usando
WITH CHECK OPTION (uma visão simétrica), ou uma view na qual uma
view simétrica foi definida, direta ou indiretamente
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 78
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
REFERENCING Especifica os nomes de correlação para as variáveis ​​de transição e os
nomes de tabela para as tabelas de transição . Os nomes de correlação
identificam uma linha específica no conjunto de linhas afetadas pela
operação SQL de acionamento. Os nomes das tabelas identificam o
conjunto completo de linhas afetadas. Cada linha afetada pela operação
SQL de trigger está disponível para a ação disparada, qualificando
colunas com nomes de correlação
FOR EACH ROW Especifica que a ação disparada deve ser aplicada uma vez para cada
linha da tabela ou view que é afetada pela operação SQL trigger.
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 79
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
FOR EACH STATEMENT Especifica que a ação disparada deve ser aplicada apenas uma
vez para toda a instrução.
Este tipo de granularidade de trigger não pode ser especificado
para um trigger BEFORE ou INSTEAD OF. Se especificado, um
trigger UPDATE ou DELETE é ativado, mesmo se nenhuma linha
for afetada pela instrução trigger UPDATE ou DELETE.
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 80
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
triggered_actions Especifica a ação a ser executada quando um trigger é ativado.
Uma ação disparada é composta por uma instrução do procedimento
SQL e por uma condição opcional para a execução da instrução do
procedimento SQL.
Predicados de evento de disparo podem ser usados ​​em qualquer lugar na
ação disparada de uma instrução CREATE TRIGGER que usa uma instrução
SQL composta (compilada) como a instrução de procedimento SQL.
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 81
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
WHEN ( condição de pesquisa )Especifica uma condição verdadeira, falsa ou desconhecida.
A condição de pesquisa fornece a capacidade de determinar se uma
determinada ação disparada deve ou não ser executada.
A ação associada é executada apenas se a condição de pesquisa especificada
for avaliada como verdadeira.
Se a cláusula WHEN for omitida, a instrução do procedimento
SQL associada será sempre executada.
A cláusula WHEN não pode ser especificada para triggers INSTEAD OF.
Uma referência a uma variável de transição com um tipo de dados XML pode
ser usada apenas em um predicado VALIDATED.
TRIGGERS (GATILHOS)
•TRIGGER NO IBM-DB2
BY JOSÉ CARLOS VITORINO 82
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
SQL-procedure-statement Especifica a instrução SQL que deve fazer parte da ação
disparada.
TRIGGERS (GATILHOS)
EXEMPLO DE TRIGGER 
NO IBM-DB2
BY JOSÉ CARLOS VITORINO 83
TRIGGERS (GATILHOS) / SQL SERVER
CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_name 
ON { table | view } 
[ WITH <dml_trigger_option> [ ,...n ] ] 
{ FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } 
[ WITH APPEND ] 
[ NOT FOR REPLICATION ] 
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > } 
<dml_trigger_option> ::=
[ ENCRYPTION ] 
[ EXECUTE AS Clause ] 
<method_specifier> ::= 
assembly_name.class_name.method_name
BY JOSÉ CARLOS VITORINO 84
TRIGGERS (GATILHOS) / SQL SERVER
•TRIGGER NO ORACLE
BY JOSÉ CARLOS VITORINO 85
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
CREATE comando para criação do trigger
OR ALTER Altera condicionalmente o trigger somente se ele já existir.
schema_name O nome do esquema ao qual o trigger DML pertence. Os triggerss DML são
definidos no escopo do esquema da tabela ou na view em que são
criados. schema_name não pode ser especificado para DDL Triggers ou de
logon.
trigger_name O nome do trigger. Um trigger_name deve seguir as regras de identificadores,
exceto que trigger_name não pode começar com # nem ##.
https://docs.microsoft.com/pt-br/sql/relational-databases/databases/database-identifiers?view=sql-server-ver15
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 86
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
table | view É a tabela ou a view em que o trigger DML é executado.
Essa tabela ou view às vezes é referenciada como tabela de trigger ou
view de trigger.
Especificar o nome totalmente qualificado da tabela ou da view é
opcional. Só é possível referenciar uma view por um trigger INSTEAD
OF. Não é possível definir triggers DML em tabelas temporárias locais
ou globais.
WITH ENCRYPTION Obscurece o texto da instrução CREATE TRIGGER.
O uso de WITH ENCRYPTION impede que o trigger seja publicado
como parte da replicação do SQL Server. WITH ENCRYPTION não
pode ser especificado para triggers CLR-Common Language Runtime.
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 87
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
EXECUTE AS Especifica o contexto de segurança no qual o trigger é executado.
Permite controlar a conta de usuário que a instância do SQL Server usa para
validar permissões em quaisquer objetos do banco de dados referidos pelo
trigger.
Essa opção é necessária para os triggers em tabelas com otimização de
memória.
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 88
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
FOR | AFTER FOR ou AFTER especifica que o TRIGGER DML é disparado apenas quando
todas as operações especificadas na instrução SQL de trigger foram iniciadas
com êxito. Todas as verificações de restrição e ações referenciais em cascata
também devem ter êxito para que esse TRIGGER seja disparado.
Não é possível definir TRIGGERs AFTER em views.
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 89
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
INSTEAD OF Especifica que o trigger DML será iniciado em vez da instrução SQL de trigger,
substituindo as ações das instruções de trigger. Não é possível especificar
INSTEAD OF para triggers DDL ou de logon.
No máximo, você pode definir um trigger INSTEAD OF por instrução INSERT,
UPDATE ou DELETE em uma tabela ou view. Também pode definir views sobre
views, onde cada uma tem seu próprio trigger INSTEAD OF.
Não é possível definir triggers INSTEAD OF em views atualizáveis que usam
WITH CHECK OPTION.
Fazer isso gera um erro quando um trigger INSTEAD OF é adicionado a uma
WITH CHECK OPTION de view atualizável especificada.
Remova essa opção usando ALTER VIEW antes de definir o trigger INSTEAD
OF.
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 90
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
DELETE
INSERT
UPDATE
Especifica as instruções de modificação de dados que, quando tentadas
nessa tabela ou view, ativam o trigger DML. Especifique pelo menos uma
opção. Use qualquer combinação dessas opções em qualquer ordem na
definição do trigger.
Para triggers INSTEAD OF, a opção DELETE não é permitida em tabelas que
tenham um relacionamento referencial que especifique uma ação ON
DELETE em cascata.
Da mesma maneira, a opção UPDATE não é permitida em tabelas que
tenham um relacionamento referencial que especifique uma ação ON
UPDATE em cascata.
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 91
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
WITH APPEND Especifica que um trigger adicional de um tipo existente deve ser
adicionado.
WITH APPEND não poderá ser usado com triggers INSTEAD OF ou se o
trigger AFTER for explicitamente declarado.
Por razões de compatibilidade com versões anteriores, WITH APPEND
só pode ser usado quando FOR é especificado, sem INSTEAD OF ou
AFTER.
Não será possível especificar WITH APPEND se EXTERNAL NAME for
usado (ou seja, se o trigger for um trigger CLR – Common Language
Routine).
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 92
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
NOT FOR 
REPLICATION
Indica que o trigger não deve ser executado quando um agente de
replicação modifica a tabela envolvida no TRIGGER.
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 93
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
sql_statement As condições e as ações do trigger. As condições de trigger especificam
critérios adicionais que determinam se os eventos DML, DDL ou de logon
fazem com que as ações de trigger sejam executadas.
As ações de trigger especificadas nas instruções Transact-SQL entram em
vigor quando a operação é tentada.
Os triggers podem incluir qualquer número e tipo de instruções Transact-
SQL, com exceções. Um trigger é criado para verificar ou alterar dados com
base em uma instrução de definição ou modificação de dados. Ele não deve
retornar dados ao usuário. As instruções Transact-SQL em um trigger
frequentemente incluem linguagem de controle de fluxo.
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 94
SEMÂNTICA DOS COMANDOS PARA CRIAR / ALTERAR TRIGGERS
sql_statement Triggers de DML usam as tabelas (conceituais) lógicas inseridas e excluídas.
Eles são estruturalmente semelhantes à tabela em que o trigger é definido,
ou seja, a tabela em que a ação do usuário é tentada.
As tabelas excluídas e inseridas contêm os valores antigos ou novos das
linhas que podem ser alteradas pela ação do usuário. Por exemplo, para
recuperar todos os valores na tabela deleted, use:
SELECT * FROM deleted;
TRIGGERS (GATILHOS) / SQL SERVER
BY JOSÉ CARLOS VITORINO 95
TRIGGERS (GATILHOS) / SQL SERVER
• COMO TRIGGERS SÃO GERADOS
• PLANO DE EXECUÇÃO
• UM PLANO DE EXECUÇÃO, SIMPLESMENTE, É O RESULTADO DA TENTATIVA DO OTIMIZADOR DE
CONSULTA DE CALCULAR A MANEIRA MAIS EFICIENTE DE IMPLEMENTAR UMA SOLICITAÇÃO –
QUERY TRIVIAL, STORED PROCEDURE OU TRIGGER -, REPRESENTADA POR DECLARAÇÕES SQL.
• NA GERAÇÃO DO PLANO DE EXECUÇÃO UM TRIGGER É TOTALMENTE COMPILADO QUANDO A
INSTRUÇÃO CREATE TRIGGER É DISPARADA. NA SEQUÊNCIAO CÓDIGO DA TRIGGER É
ARMAZENADO NO CATÁLOGO / DICIONÁRIO DE DADOS, FICANDO O TRIGGER NO ESTADO DE
PRONTO PARA SER EXECUTADO.
BY JOSÉ CARLOS VITORINO 96
TRIGGERS (GATILHOS) / SQL SERVER
• CLASSES DE EVENTOS DE TRIGGERS NO SQL-SERVER
• DML TRIGGERS
• DDL TRIGGERS
• LOGON TRIGGERS
BY JOSÉ CARLOS VITORINO 97
TRIGGERS (GATILHOS) / SQL SERVER
• CLASSES DE EVENTOS DE TRIGGERS NO SQL-SERVER
• DML TRIGGERS
• SÃO OS MAIS COMUNS
• SÃO EXECUTADOS AUTOMATICAMENTE QUANDO UM EVENTO DML (LINGUAGEM DE MANIPULAÇÃO DE DADOS)
OCORRE E AFETA A TABELA OU VIEWS SUBJACENTES DEFINIDAS NO TRIGGER.
• OS EVENTOS DML SÃO AS INSTRUÇÕES: DELETE , INSERT, UPDATE.
• OS DML TRIGGERS PODEM SER USADOS PARA IMPOR REGRAS DE NEGÓCIOS E INTEGRIDADE REFERENCIAL DE
DADOS, CONSULTAR OUTRAS TABELAS E INCLUIR INSTRUÇÕES TRANSACT-SQL COMPLEXAS.
• O TRIGGER E A INSTRUÇÃO QUE O DISPARA SÃO TRATADOS COMO UMA TRANSAÇÃO SIMPLES, QUE PODE SER
REVERTIDA DENTRO DO TRIGGER.
• SE UM ERRO GRAVE FOR DETECTADO (ESPAÇO EM DISCO INSUFICIENTE, POR EXEMPLO), TODA A TRANSAÇÃO SERÁ
REVERTIDA AUTOMATICAMENTE.
BY JOSÉ CARLOS VITORINO 98
TRIGGERS (GATILHOS) / SQL SERVER
• CLASSES DE EVENTOS DE TRIGGERS NO SQL-SERVER
• DDL TRIGGERS
• OS TRIGGERS DDL SÃO DISPARADOS EM RESPOSTA A DIVERSOS EVENTOS DDL 
(LINGUAGEM DE DEFINIÇÃO DE DADOS). 
• ESSES EVENTOS CORRESPONDEM PRINCIPALMENTE A INSTRUÇÕES TRANSACT-
SQL QUE COMEÇAM COM AS PALAVRAS-CHAVE CREATE, ALTER, DROP, GRANT, 
DENY, REVOKE OU UPDATE STATISTICS.
• DETERMINADOS STORED PROCEDURE DO SISTEMA QUE EXECUTAM OPERAÇÕES 
DO TIPO DDL TAMBÉM PODEM DISPARAR DDL TRIGGERS.
BY JOSÉ CARLOS VITORINO 99
TRIGGERS (GATILHOS) / SQL SERVER
• CLASSES DE EVENTOS DE TRIGGERS NO SQL-SERVER
• DDL TRIGGERS
• USE TRIGGERS DDL QUANDO SE ANTECIPAR A PROBLEMAS COMO:
• EVITAR DETERMINADAS ALTERAÇÕES EM SEU ESQUEMA DE BANCO DE
DADOS.
• IDENTIFICAR UMA ANOMALIA NO BANCO DE DADOS EM RESPOSTA A UMA
ALTERAÇÃO EM SEU ESQUEMA DE BANCO DE DADOS.
• REGISTRAR ALTERAÇÕES OU EVENTOS NO ESQUEMA DE BANCO DE DADOS.
BY JOSÉ CARLOS VITORINO 100
TRIGGERS (GATILHOS) / SQL SERVER
• CLASSES DE EVENTOS DE TRIGGERS NO SQL-SERVER
• LOGON TRIGGERS
• OS LOGON TRIGGERS ACIONAM STORED PROCEDURE EM RESPOSTA A UM EVENTO
LOGON.
• ESSE EVENTO OCORRE QUANDO É ESTABELECIDA UMA SESSÃO DE USUÁRIO COM UMA
INSTÂNCIA DO SQL SERVER.
• OS LOGON TRIGGERS SÃO ACIONADOS APÓS O TÉRMINO DA FASE DE AUTENTICAÇÃO,
MAS ANTES DA SESSÃO DE USUÁRIO SER REALMENTE ESTABELECIDA. LOGO, TODAS AS
MENSAGENS ORIGINADAS NO TRIGGER QUE CHEGARIAM, NORMALMENTE, AO
USUÁRIO, COMO MENSAGENS DE ERRO E MENSAGENS DA INSTRUÇÃO PRINT, SÃO
DESVIADAS PARA O LOG DE ERROS DO SQL SERVER .
• OS TRIGGERS DE LOGON NÃO SÃO ACIONADOS QUANDO A AUTENTICAÇÃO FALHA.
BY JOSÉ CARLOS VITORINO 101
TRIGGERS (GATILHOS) / SQL SERVER
• CLASSES DE EVENTOS DE TRIGGERS NO SQL-SERVER
• LOGON TRIGGERS
• VOCÊ PODE USAR LOGON TRIGGERS PARA AUDITAR E CONTROLAR SESSÕES DO SERVIDOR,
POR EXEMPLO, RASTREANDO A ATIVIDADE DE LOGON, RESTRINGINDO OS LOGONS AO SQL
SERVER OU LIMITANDO O NÚMERO DE SESSÕES PARA UM LOGON ESPECÍFICO.
BY JOSÉ CARLOS VITORINO 102
TRIGGERS (GATILHOS) / SQL SERVER
• AS SEGUINTES INSTRUÇÕES TRANSACT-SQL NÃO SÃO PERMITIDAS EM UM TRIGGER 
DML:
• ALTER DATABASE
• CREATE DATABASE
• DROP DATABASE
• RESTORE DATABASE
• RESTORE LOG
• RECONFIGURE
BY JOSÉ CARLOS VITORINO 103
TRIGGERS (GATILHOS) / SQL SERVER
• AS INSTRUÇÕES TRANSACT-SQL A SEGUIR NÃO SÃO PERMITIDAS EM UM TRIGGER DML 
USADO EM UMA TABELA OU VIEW QUE SEJA ALVO DA AÇÃO DE TRIGGER.
• CREATE INDEX (INCLUINDO CREATE SPATIAL INDEX E CREATE XML INDEX)
• ALTER INDEX
• DROP INDEX
• DROP TABLE
• DBCC DBREINDEX
• ALTER PARTITION FUNCTION
• ALTER TABLE QUANDO USADO FAZ O SEGUINTE:
• ADICIONA, MODIFICA OU DESCARTA COLUNAS.
• ALTERNA PARTIÇÕES.
• ADICIONA OU DESCARTA RESTRIÇÕES PRIMARY KEY OU UNIQUE.
BY JOSÉ CARLOS VITORINO 104
TRIGGERS (GATILHOS) / SQL SERVER
•TIPOS DE TRIGGERS NO SQL-SERVER
•FOR | AFTER
• INSTEAD OF.
BY JOSÉ CARLOS VITORINO 105
TRIGGERS (GATILHOS) / SQL SERVER
•TIPOS DE TRIGGERS NO SQL-SERVER
•FOR | AFTER
• SÃO TRIGGERS EXECUTADOS QUANDO EVENTOS: DELETE, INSERT E UPDATE SÃO
DISPARADOS EM UMA TABELA, SENDO QUE TRIGGERS FOR AFETAM TABELAS E
VIEWS ENQUANTO QUE TRIGGERS AFTER NÃO TEM ALCANCE EM VIEWS.
BY JOSÉ CARLOS VITORINO 106
TRIGGERS (GATILHOS) / SQL SERVER
•TIPOS DE TRIGGERS NO SQL-SERVER
• INSTEAD OF
• PERMITE VERIFICAR AS REGRAS DE NEGÓCIOS ANTES DA EFETIVAÇÃO DO COMANDO.
• ESPECIFICA QUE O DML TRIGGER SERÁ INICIADO EM VEZ DA INSTRUÇÃO SQL TRIGGER, 
SUBSTITUINDO AS AÇÕES DAS INSTRUÇÕES DE TRIGGER. 
• NÃO É POSSÍVEL ESPECIFICAR INSTEAD OF PARA DDL TRIGGER OU LOGON TRIGGER.
• NO MÁXIMO, É POSSÍVEL DEFINIR UM TRIGGER INSTEAD OF POR INSTRUÇÃO INSERT, 
UPDATE OU DELETE EM UMA TABELA OU VIEW
BY JOSÉ CARLOS VITORINO 107
TRIGGERS (GATILHOS) / SQL SERVER
•TIPOS DE TRIGGERS NO SQL-SERVER
•MAGIC TABLES
• SÃO DOIS TIPOS ESPECIAIS DE TABELAS TEMPORÁRIAS, NOMEADAS DE DELETED E 
INSERTED, RESIDENTES EM MEMÓRIA, USADOS PELO SQL SERVER EM DML TRIGGERS.
• ESSAS TABELAS TEMPORÁRIAS SÃO UTILIZADAS PARA TESTAR OS EFEITOS DE CERTAS 
MODIFICAÇÕES DE DADOS E DEFINIR CONDIÇÕES PARA AÇÕES DE TRIGGER DML. 
• NÃO É POSSÍVEL MODIFICAR DIRETAMENTE OS DADOS NAS TABELAS OU EXECUTAR 
OPERAÇÕES DE LINGUAGEM DE DEFINIÇÃO DE DADOS (DDL) NAS TABELAS, COMO 
CREATE INDEX.
BY JOSÉ CARLOS VITORINO 108
TRIGGERS (GATILHOS) / SQL SERVER
•TIPOS DE TRIGGERS NO SQL-SERVER
•MAGIC TABLES
• EM DML TRIGGERS, AS TABELAS INSERTED E DELETED SÃO USADAS
PRINCIPALMENTE PARA REALIZAR O SEGUINTE:
• ESTENDER INTEGRIDADE REFERENCIAL ENTRE AS TABELAS.
• INSERIR OU ATUALIZAR DADOS EM TABELAS BASE SUBJACENTES A UMA VIEW.
• TESTAR ERROS E TOMAR DECISÕES BASEADAS NOS ERROS.
• ENCONTRAR A DIFERENÇA ENTRE O ESTADO DE UMA TABELA ANTES E DEPOIS DE
UMA MODIFICAÇÃO DE DADOS E EXECUTAR AÇÕES COM BASE NESSA DIFERENÇA.
BY JOSÉ CARLOS VITORINO 109
TRIGGERS (GATILHOS) / SQL SERVER
•TIPOS DE TRIGGERS NO SQL-SERVER
•MAGIC TABLES
• TABELA DELETED
• ARMAZENA CÓPIAS DAS LINHAS AFETADAS DURANTE AS INSTRUÇÕES DELETE E
UPDATE.
• DURANTE A EXECUÇÃO DE UMA INSTRUÇÃO DELETE OU UPDATE, AS LINHAS SÃO
EXCLUÍDAS DA TABELA REFERENCIADA NOS TRIGGERS E TRANSFERIDAS PARA A
TABELA DELETED.
• A TABELA DELETED E A TABELA REFERENCIADA NO TRIGGER NORMALMENTE NÃO
TÊM LINHAS EM COMUM.
BY JOSÉ CARLOS VITORINO 110
TRIGGERS (GATILHOS) / SQL SERVER
•TIPOS DE TRIGGERS NO SQL-SERVER
•MAGIC TABLES
• TABELAS INSERTED
• ARMAZENA CÓPIAS DAS LINHAS AFETADAS DURANTE AS INSTRUÇÕES INSERT E
UPDATE.
• DURANTE UMA TRANSAÇÃO DE INSERÇÃO OU ATUALIZAÇÃO, NOVAS LINHAS SÃO
ADICIONADAS À TABELA INSERTED E A TABELA REFERENCIADA NO TRIGGER.
• AS LINHAS DA TABELA INSERIDA SÃO CÓPIAS DAS NOVAS LINHAS DA TABELA
REFERENCIADA NO TRIGGERS.
BY JOSÉ CARLOS VITORINO 111
TRIGGERS (GATILHOS) / SQL SERVER
•TIPOS DE TRIGGERS NO SQL-SERVER
•MAGIC TABLES
•TABELAS INSERTED
•UMA TRANSAÇÃO DE UPDATE É SEMELHANTE A UMA OPERAÇÃO DE
DELETE SEGUIDA POR UMA OPERAÇÃO DE INSERÇÃO;
•AS LINHAS ANTIGAS SÃO COPIADAS PRIMEIRO PARA A TABELA
DELETED E, EM SEGUIDA, AS NOVAS LINHAS SÃO COPIADAS PARA A
TABELA ACIONADORA E PARA A TABELA INSERTED.
BY JOSÉ CARLOS VITORINO 112
TRIGGERS (GATILHOS) / SQL SERVER
•OTIMIZANDO DML TRIGGERS
• OS TRIGGERS FUNCIONAM EM TRANSAÇÕES (IMPLÍCITAS OU NÃO) E, ENQUANTO
ESTIVEREM ABERTOS, BLOQUEARÃO RECURSOS.
• O BLOQUEIO PERMANECERÁ EM VIGOR ATÉ QUE A TRANSAÇÃO SEJA CONFIRMADA (COM
COMMIT) OU REJEITADA (COM UM ROLLBACK).
• QUANTO MAIS UM TRIGGER É EXECUTADO, MAIOR A PROBABILIDADE DE OUTRO PROCESSO
SER BLOQUEADO.
• PORTANTO, ESCREVA TRIGGERS PARA DIMINUIR A DURAÇÃO DELES SEMPRE QUE POSSÍVEL.
UMA MANEIRA DE ALCANÇAR UMA DURAÇÃO MAIS CURTA É LIBERAR UM TRIGGER
QUANDO UMA INSTRUÇÃO DML NÃO ALTERA NENHUMA LINHA.
BY JOSÉ CARLOS VITORINO 113
TRIGGERS (GATILHOS) / SQL SERVER
•OTIMIZANDO DML TRIGGERS
• PARA LIBERAR O TRIGGER PARA UM COMANDO QUE NÃO ALTERA NENHUMA LINHA,
EMPREGUE A VARIÁVEL DE SISTEMA ROWCOUNT_BIG.
• O SEGUINTE SNIPPET (FRAGMENTO) DE CÓDIGO T-SQLMOSTRA COMO LIBERAR O TRIGGER
PARA UM COMANDO QUE NÃO ALTERA NENHUMA LINHA.
• ESSE CÓDIGO DEVERÁ ESTAR PRESENTE NO INÍCIO DE CADA TRIGGER DML:
IF (ROWCOUNT_BIG() = 0)
RETURN;
BY JOSÉ CARLOS VITORINO 114
https://docs.microsoft.com/pt-br/sql/t-sql/functions/rowcount-big-transact-sql?view=sql-server-ver15
TRIGGERS (GATILHOS) / SQL SERVER
•VANTAGENS DE TRIGGERS
• PERMITEM UMA DESCRIÇÃO UNIFORME E CENTRALIZADA DAS REGRAS DE
NEGÓCIOS RELEVANTES PARA O SISTEMA DE INFORMAÇÃO;
• FACILITA A MANUTENÇÃO DAS REGRAS DE NEGÓCIO.
• GANHO DE PERFORMANCE NAS VALIDAÇÕES DE INCLUSÃO, ALTERAÇÃO E
EXCLUSÃO POIS TODO O PROCESSAMENTO É FEITO NO SERVIDOR DE BANCO DE
DADOS, DIMINUINDO O TRÁFEGO PELA REDE DE INSTRUÇÕES SQL E RESULTADO
DO SERVIDOR.
BY JOSÉ CARLOS VITORINO 115
TRIGGERS (GATILHOS) / SQL SERVER
•DESVANTAGENS DE TRIGGERS
• PERDA DE PORTABILIDADE DO SISTEMA
• APESAR DA PADRONIZAÇÃO DESDE O SQL 2003, OS SGBD’S DO MERCADO UTILIZAM
SINTAXES DIFERENTES.
•GERENCIAMENTO DE CÓDIGO
• O USO DE TRIGGER REPRESENTA MAIS CÓDIGO PARA SER VERSIONADO, GERENCIADO E
MANTIDO PORTANDO GERA UM ESFORÇO MAIOR PARA GERENCIAMENTO DO CÓDIGO
SQL DOS TRIGGERS.
BY JOSÉ CARLOS VITORINO 116
TRIGGERS (GATILHOS) / SQL SERVER
•DESVANTAGENS DE TRIGGERS
•EQUIPE MAIS ESPECIALIZADA
• O DESENVOLVIMENTO DE TRIGGER REQUER UMA EQUIPE COM SÓLIDOS
CONHECIMENTOS DE PROGRAMAÇÃO DE BANCO DE DADOS, SQL, OTIMIZAÇÃO DE
CONSULTAS, ETC. NEM SEMPRE É FÁCIL CONSEGUIR UM TIME DE DESENVOLVEDORES
COM ESTE PERFIL.
BY JOSÉ CARLOS VITORINO 117
TRIGGERS (GATILHOS) / SQL SERVER
•PRÁTICAS
• DESENVOLVENDO TRIGGERS NO SQL-SERVER
BY JOSÉ CARLOS VITORINO 118
TRIGGERS (GATILHOS) / SQL SERVER
•DESENVOLVENDO TRIGGERS NO SQL-SERVER
•EXISTEM DUAS MANEIRAS DE DESENVOLVER TRIGGERS NO SQL-SERVER
• UTILIZANDO O SSMS - SQL SERVER MANAGEMENT STUDIO
• CODIFICAÇÃO DIRETA.
BY JOSÉ CARLOS VITORINO 119
TRIGGERS (GATILHOS) / SQL SERVER
•DESENVOLVENDO TRIGGERS NO SQL-SERVER
•EXISTEM DUAS MANEIRAS DE DESENVOLVER TRIGGERS NO SQL-
SERVER
•UTILIZANDO O SSMS - SQL SERVER MANAGEMENT STUDIO, 
CONSIDERANDO DML TRIGGERS
• OS PASSOS SÃO:
1. COMO AS DML TRIGGERS SÃO ASSOCIADAS A TABELAS E VIEWS:
2. NO PESQUISADOR DE OBJETO APONTE E CLIQUE SOBRE A TABELA 
OU VIEW QUE SERÁ IMPACTADA PELO TRIGGER (VIDE FIGURA, NO 
SLIDE 115)
BY JOSÉ CARLOS VITORINO 120
DESENVOLVENDO TRIGGERS NO SQL-SERVER
BY JOSÉ CARLOS VITORINO 121
DESENVOLVENDO TRIGGERS NO SQL-SERVER
BY JOSÉ CARLOS VITORINO 122
O SSMS responderá
apresentando o
seguinte TEMPLATE,
cujas informações
você deverá
complementar
DESENVOLVENDO TRIGGERS NO SQL-SERVER
BY JOSÉ CARLOS VITORINO 123
Aponte e clique
sobre a opção Novo
TRIGGER...
TRIGGERS (GATILHOS) / SQL SERVER
•DESENVOLVENDO TRIGGERS NO SQL-SERVER
•COMPLEMENTANDO O TEMPLATE:
• LINHA 15: ESTA DECLARAÇÃO É OPCIONAL. QUANDO SET ANSI NULLS É
DEFINIDO COMO ON, UMA INSTRUÇÃO SELECT QUE USA
WHERE COLUMN_NAME = NULL RETORNARÁ ZERO LINHA.
• LINHA 25: ESTA DECLARAÇÃO É OPCIONAL. QUANDO SET
QUOTED_IDENTIFIER FOR ON (PADRÃO), OS IDENTIFICADORES PODEM SER
DELIMITADOS POR ASPAS DUPLAS (" "), E OS LITERAIS PRECISAM SER
DELIMITADOS POR ASPAS SIMPLES (' ').
BY JOSÉ CARLOS VITORINO 124
TRIGGERS (GATILHOS) / SQL SERVER
•DESENVOLVENDO TRIGGERS NO SQL-SERVER
•COMPLEMENTANDO O TEMPLATE:
• LINHA 24: DEVE-SE DECLARAR O NOME DO SCHEMA E NOME DO
TRIGGER, UTILIZANDO AS REGRAS DE NOMEAÇÃO DE OBJETOS DA
EMPRESA;
• LINHA 25: LOGO APÓS A CLÁUSULA ON, DEVER SER APOSTO O NOME
DA TABELA OU VIEWS;
• LINHA 26: DEVE-SE APOR A CONDIÇÃO DE DISPARO [AFTER, FOR,
INSTEAD OF] SEGUINDO DO EVENTO DISPARADOR [DELETE, INSERT,
UPDATE]
BY JOSÉ CARLOS VITORINO 125
TRIGGERS (GATILHOS) / SQL SERVER
•DESENVOLVENDO TRIGGERS NO SQL-SERVER
•COMPLEMENTANDO O TEMPLATE:
• LINHA 27: É OBRIGATÓRIA E NESTA ORDEM
• LINHA 28 -35: DEVE SER COLOCADO O BLOCO DE DECLARAÇÕES SQL
RESULTANTE DO EVENTO DISPARADO;
• LINHA 31: SET NOCOUNT, QUANDO FOR ON, IMPEDE QUE A
MENSAGEM QUE MOSTRA A CONTAGEM DO NÚMERO DE LINHAS
AFETADAS POR UMA INSTRUÇÃO TRANSACT-SQL OU POR UM STORED
PROCEDURE SEJA RETORNADA COMO PARTE DO CONJUNTO DE
RESULTADOS.
BY JOSÉ CARLOS VITORINO 126
TRIGGERS (GATILHOS) / SQL SERVER
•DESENVOLVENDO TRIGGERS NO SQL-SERVER
•EXISTEM DUAS MANEIRAS DE DESENVOLVER TRIGGERS NO SQL-
SERVER
• CODIFICAÇÃO DIRETA.
• DEVE UTILIZAR O AMBIENTE DO SSMS (NOVA CONSULTA) OU
• QUALQUER IDE DO MERCADO, OPENSOURCE OU NÃO.
BY JOSÉ CARLOS VITORINO 127
TRIGGERS (GATILHOS) / SQL SERVER
•MELHORES PRÁTICAS DESENVOLVENDO TRIGGERS NO SQL-SERVER
•LIMITE O NÚMERO DE TRIGGERS POR TABELA OU VIEW
•PENSE SIMPLES
•DOCUMENTE SEUS TRIGGERS
•EVITE TRIGGERS EM AMBIENTE DE BANCO DE DADOS DISTRIBUÍDOS
•VALIDE SEMPRE SEUS TRIGGERS
BY JOSÉ CARLOS VITORINO 128
TRIGGERS (GATILHOS) / SQL SERVER
•MELHORES PRÁTICAS DESENVOLVENDO TRIGGERS NO SQL-SERVER
•LIMITE O NÚMERO DE TRIGGERS POR TABELA OU VIEW
• O SQL SERVER NÃO TEM LIMITAÇÃO NO NÚMERO DE TRIGGERS QUE VOCÊ
PODE DEFINIR EM UMA TABELA OU VIEWS , MAS COMO PRÁTICA
RECOMENDADA, LIMITE O NÚMERO A UM OU NO MÁXIMO DOIS TRIGGERS
ASSOCIADOS AO MESMO EVENTO DE DISPARO EM UM OBJETO.
BY JOSÉ CARLOS VITORINO 129
TRIGGERS (GATILHOS) / SQL SERVER
•MELHORES PRÁTICAS DESENVOLVENDO TRIGGERS NO SQL-SERVER
•LIMITE O NÚMERO DE TRIGGERS POR TABELA OU VIEW
• POR EXEMPLO, NÃO HÁ PROBLEMA SE VOCÊ TIVER UMA TABELA (OU VIEW)
COM TRÊS TRIGGERS E CADA UM DESSES TRIGGERS DISPARADOS
SEPARADAMENTE PARA INSTRUÇÕES INSERT, UPDATE E DELETE.
• TER MAIS TRIGGERS POR OBJETO ADICIONA COMPLEXIDADE DESNECESSÁRIA
NO MOMENTO DA DEPURAÇÃO E ESTABELECIMENTO DA ORDEM DE EXECUÇÃO
DO TRIGGER.
BY JOSÉ CARLOS VITORINO 130
TRIGGERS (GATILHOS) / SQL SERVER
•MELHORES PRÁTICAS DESENVOLVENDO TRIGGERS NO SQL-SERVER
•LIMITE O NÚMERO DE TRIGGERS POR TABELA OU VIEW
• SE VOCÊ TEM MUITOS TRIGGERS POR OBJETO, RECOMENDA-SE A REVISÃO DAS
REGRAS DE NEGÓCIOS E SE POSSÍVEL MOVA ESSES CÓDIGOS PARA STORED
PROCEDURE E, EM SEGUIDA, ADICIONE A CHAMADA DO STORED PROCEDURE A
UM ÚNICO TRIGGER.
BY JOSÉ CARLOS VITORINO 131
TRIGGERS (GATILHOS) / SQL SERVER
•MELHORES PRÁTICAS DESENVOLVENDO TRIGGERS NO SQL-SERVER
• PENSE SIMPLES
• EVITE LÓGICA COMPLEXA EM SEUS TRIGGERS
• EVITE, SEMPRE QUE POSSÍVEL, CHAMADAS DE STORED PROCEDURES OU USER
DEFINED FUNCTIONS
• CHAMADAS PARA OUTROS OBJETOS PODER RESULTAR EM COMPILAÇÕES
EXCESSIVAS E PLANOS DE EXECUÇÃO NÃO EFICIENTES SENDO
ARMAZENADOS EM CACHE.
• EVITE TRIGGERS ANINHADOS
BY JOSÉ CARLOS VITORINO 132
TRIGGERS (GATILHOS) / SQL SERVER
•MELHORES PRÁTICAS DESENVOLVENDO TRIGGERS NO SQL-
SERVER
•DOCUMENTE SEUS TRIGGERS
• OS TRIGGERS POSSUEM UMA QUALIDADE QUE OS STORED PROCEDURES NÃO
POSSUEM: ELES SÃO INVISÍVEIS PARA O USUÁRIO.
• EM OUTRAS PALAVRAS, SE VOCÊ NÃO ESTIVER CIENTE DE QUE HÁ UM
TRIGGER ASSOCIADO A UMA DETERMINADA TABELA QUE SEU CÓDIGO ESTÁ
USANDO, SEU CÓDIGO PODE NÃO FUNCIONAR CONFORME O ESPERADO. ISSO
PODE LEVAR MUITO TEMPO PARA VOCÊ DESCOBRIR, ESPECIALMENTE SE SEU
CÓDIGO FOR GRANDE E COMPLEXO
BY JOSÉ CARLOS VITORINO 133
TRIGGERS (GATILHOS) / SQL SERVER
•MELHORES PRÁTICAS DESENVOLVENDO TRIGGERS NO SQL-SERVER
• EVITE TRIGGERS EM AMBIENTE DE BANCO DE DADOS DISTRIBUÍDOS
• USAR CONSULTAS REMOTAS EM TRIGGERS É UMA PRÁTICA RUIM.
• AS CONSULTAS DISTRIBUÍDAS TÊM EFEITOS PREJUDICIAIS NO DESEMPENHO E
DEVE-SE, SE POSSÍVEL, EVITAR ESSA PRÁTICA.
• NO CASO DE VOCÊ TER QUE IMPLEMENTAR INTEGRIDADE REFERENCIAL ENTRE
BANCOS DE DADOS QUE RESIDEM EM SERVIDORES DIFERENTES, TENTE LIMITAR
O USO DE CONSULTAS REMOTAS.
BY JOSÉ CARLOS VITORINO 134
TRIGGERS (GATILHOS) / SQL SERVER
•MELHORES PRÁTICAS DESENVOLVENDO TRIGGERS NO SQL-SERVER
•VALIDE SEMPRE SEUS TRIGGERS
• ESTA É A MELHOR PRÁTICA QUE FREQUENTEMENTE ESQUECEMOS.
• DO PONTO DE VISTA LÓGICO VOCÊ PODE FAZER SUAS VALIDAÇÕES ONDE
QUISER, MAS DO PONTO DE VISTA DO DESEMPENHO SERIA ÓTIMO
VERIFICARMOS AS CONDIÇÕES NO INÍCIO DO CÓDIGO DO TRIGGER.
• POR EXEMPLO, VOCÊ PODE VERIFICAR SE HOUVE UMA LINHA AFETADA ANTES
DE COMEÇAR A EXECUTAR QUALQUER CÓDIGO USANDO AS SEGUINTES LINHAS.
• IF (@@ROWCOUNT =0) RETURN;
BY JOSÉ CARLOS VITORINO 135
TRIGGERS (GATILHOS) / SQL SERVER
• COMO ENCONTRAR SEUS TRIGGERS
• EM ALGUMAS SITUAÇÕES DE TROUBLESHOOTING PRECISAMOS LOCALIZAR 
TRIGGERS PARA DEBUGÁ-LAS, CONTUDO
• LOCALIZAR TRIGGERS NO SSMS NÃO É UMA TAREFA FÁCIL, AINDA MAIS EM UM 
AMBIENTE COMPLEXO.
• É NECESSÁRIO FAZER UMA BUSCA CANSATIVA NO PESQUISADOR DE OBJETOS.
• A SOLUÇÃO ESTÁ NA UTILIZAÇÃO DE CATALOG VIEWS. AINDA ASSIM DEVE-SE 
UTILIZAR AS CATALOG VIEWS PARA CADA CLASSES DE EVENTOS DE TRIGGERS
• DML TRIGGERS
• DDL TRIGGERS
• LOGON TRIGGERS
BY JOSÉ CARLOS VITORINO 136
TRIGGERS (GATILHOS) / SQL SERVER
•COMO ENCONTRAR SEUS TRIGGERS
•DML TRIGGERS
• ESTA SIMPLES QUERY PERMITE A EXIBIÇÃO DE TODAS AS DML TRIGGERS 
ASSOCIADAS A UM DETERMINADO BANCO DE DADOS:
[USE NOME DO BANCO DE DADOS]
SELECT * FROM sys.objects WHERE type ='TR'
BY JOSÉ CARLOS VITORINO 137
TRIGGERS (GATILHOS) / SQL SERVER
•COMO ENCONTRAR SEUS TRIGGERS
•DDL TRIGGERS
• ESTA SIMPLES QUERY PERMITE A EXIBIÇÃO DE TODAS AS DDL TRIGGERS 
ASSOCIADAS A UM DETERMINADO BANCO DE DADOS:
[USE NOME DO BANCO DE DADOS]
SELECT * FROM sys.triggers
BY JOSÉ CARLOS VITORINO 138
TRIGGERS (GATILHOS) / SQL SERVER
•COMO ENCONTRAR SEUS TRIGGERS
•LOGON TRIGGERS
• ESTA SIMPLES QUERY PERMITE A EXIBIÇÃO DE TODAS OS LOGON 
TRIGGERS ASSOCIADAS A UM DETERMINADO SERVIDOR:
SELECT *
FROM sys.server_triggers
BY JOSÉ CARLOS VITORINO 139
TRIGGERS (GATILHOS) / SQL SERVER
•COMO ENCONTRAR SEUS TRIGGERS
•NOTE QUE MESMO COM ESSES RECURSOS É NECESSÁRIO ACESSAR PELO 
MENOS TRÊS CATALOG VIEWS PARA LOCALIZAR TODOS OS TRIGGERS.
•O IDEAL É UTILIZAR O CONCEITO DE JUNÇÕES E EXTRAIR INFORMAÇÕES 
DE DUAS OU MAIS CATALOG VIEWS PARA O PROPÓSITO DE LOCALIZAR 
TODOS OS TRIGGERS. VIDE OS SCRIPTS 14 E 14B
BY JOSÉ CARLOS VITORINO 140
•TRIGGERS (GATILHOS)
REFERÊNCIAS
Elmasri, Ramez; Navathe Shamkant B. Sistemas de Banco de Dados. 7a. Ed.. São Paulo:
Pearson Education do Brasil, 2018. cap. 26, páginas 867-915
https://web.stanford.edu/dept/itss/docs/oracle/10gr2/appdev.102/b14251/adfns_triggers.htm
https://www.ibm.com/docs/en/db2-for-zos/11?topic=statements-create-trigger
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7004.htm
https://docs.microsoft.com/pt-br/sql/t-sql/statements/create-trigger-transact-sql?view=sql-
server-ver15
https://crate.io/docs/sql-99/en/latest/chapters/24.html
BY JOSÉ CARLOS VITORINO 141
https://web.stanford.edu/dept/itss/docs/oracle/10gr2/appdev.102/b14251/adfns_triggers.htm
https://www.ibm.com/docs/en/db2-for-zos/11?topic=statements-create-trigger
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7004.htm
https://docs.microsoft.com/pt-br/sql/t-sql/statements/create-trigger-transact-sql?view=sql-server-ver15
https://crate.io/docs/sql-99/en/latest/chapters/24.html

Continue navegando