Baixe o app para aproveitar ainda mais
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
Compartilhar