A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

BANCO DE DADOS Araújo Lima Out / 2017 Araújo.

Apresentações semelhantes


Apresentação em tema: "BANCO DE DADOS Araújo Lima Out / 2017 Araújo."— Transcrição da apresentação:

1 BANCO DE DADOS Araújo Lima Out / 2017 Araújo

2 Aula 24 Linguagem de Consulta a Banco de Dados Triggers (Gatilhos)
Integridade Referencial Declarativa Integridade Referencial Procedural (via trigger) Integridade via Constraints Araújo

3 Triggers ... Trigger (Gatilho)
Um tipo de procedimento armazenado no banco de dados, que é executado automaticamente quando há uma tentativa de atualizar (insert / update / delete) os dados de uma tabela Um trigger é definido em uma tabela sendo executado quando a tabela tende a ser atualizada Diferente dos procedimentos armazenados o trigger não pode ser chamado para execução diretamente e também não aceita e nem passa parâmetros Araújo

4 Triggers ... Trigger (Gatilho)
um tipo de procedimento armazenado no banco de dados, que é executado automaticamente quando há uma tentativa de atualizar (insert / update / delete) os dados de uma tabela usado para: manter integridade referencial implementar regra de negócio criar uma coluna a partir de outras replicar alterações em uma tabela usar mensagens de erro personalizadas atualizar outras tabelas quando uma tabela sofre alteração Araújo

5 Triggers ... Trigger (Gatilho)
O gatilho (trigger) e o comando que provoca sua execução fazem parte de uma TRANSAÇÃO que pode ser desfeita opcionalmente por um comando ROLLBACK Na definição do trigger pode-se usar ROLLBACK TRANSACTION mesmo sem um BEGIN TRANSACTION Araújo

6 ... Triggers ... DDL - Linguagem de Definição de Dados
CREATE TRIGGER nome-do-trigger ON nome-da-tabela FOR [INSERT] [, UPDATE] [, DELETE] AS comandos Transact SQL CREATE TRIGGER incFunc ON funcionario FOR INSERT AS print ‘mais um funcionário cadastrado’ incFunc – nome do trigger (gatilho) funcionario – tabela a que o trigger se refere INSERT – evento que causa a execução do trigger Araújo

7 ... Triggers ... DDL - Linguagem de Definição de Dados
CREATE TRIGGER nome-do-trigger ON tabela FOR [INSERT] [, UPDATE] [, DELETE] AS comandos Transact SQL CREATE TRIGGER incFunc ON funcionario FOR INSERT AS print ‘mais um funcionário cadastrado’ ao inserir uma linha na tabela funcionario o trigger é executado e exibe “mais um funcionário cadastrado” Araújo

8 ... Triggers ... create trigger excFunc on funcionario for delete as
- - informa exclusão de func. e qtd de func. restantes begin int print ‘mais um funcionário excluído’ = count(*) from func print ‘funcionários restantes’ end O trigger excFunc fica armazenado no banco de dados à espera da exclusão de um funcionário para ser executado Araújo

9 ... Triggers ... DROP TRIGGER nome-do-trigger
drop trigger excFunc /* exclui trigger excFunc /* sys.sp_helptrigger nome-da-tabela sys.sp_helptrigger func exibe triggers da tabela func sys.sp_helptext nome-do-objeto sys.sp_helptext excFunc /* exibe texto do trigger excFunc */ Araújo

10 ... Triggers ... Replicando inclusão de linha em outra tabela usando trigger create trigger IncReplicFunc on func for insert as insert into func1 select * from inserted replica na tabela func1, linha recém incluída na tabela func INSERTED – tabela temporária onde são copiadas as linhas incluídas (SQL Server) Araújo

11 ... Triggers ... Replicando exclusão de linha com trigger
create trigger ExcRepFunc on func for delete as delete from func1 where func1.mat in (select mat from deleted) exclui da tabela func1 linha recém excluída de func DELETED – tabela temporária onde são copiadas as linhas excluídas (SQL Server) drop trigger ExcRepFunc - - elimina trigger do banco de dados Araújo

12 ... Triggers ... Replicando alteração de linha com trigger
create trigger AltRepFunc on func for update as update func1 set sal = (select sal from inserted) where func1.mat in (select mat from inserted) replica na tabela func1 a alteração recém efetuada na tabela func drop trigger AltRepFunc - - elimina trigger Araújo

13 ... Triggers ... Trigger não permite redução de salário
CREATE trigger NaoReduzSalario on Func for update as declare @sal_atu numeric(8,2) = ( select sal from deleted ) = ( select sal from inserted ) if begin print 'Novo salário não pode ser menor que salário atual' rollback end Araújo

14 ... Triggers ... Funcionário não pode ser seu chefe
CREATE trigger ChecaSubordChefe on Func for insert,update as declare @mat int = ( select mat from inserted ) = ( select matChef from inserted ) if begin print 'Funcionário não pode ser chefe dele mesmo' rollback end Araújo

15 ... Triggers ... Tabelas temporárias Inserted e Deleted
Quando um trigger é executado, o SQL Server cria duas tabelas temporárias: INSERTED - onde são copiadas as linhas incluídas e alteradas (novos valores) durante execução do trigger DELETED - onde são copiadas as linhas excluídas e alteradas (valores antigos) durante execução do trigger Araújo

16 ... Triggers ... TRIGGER FOR INSERT
CREATE TABLE Tabela (Mat INT, Nome VARCHAR(20)) CREATE TRIGGER Inclui ON Tabela FOR INSERT AS SELECT ‘Dados a serem inseridos: ’ SELECT * FROM INSERTED INSERT INTO Tabela VALUES(100, ‘Ari’) O Trigger será disparado e mostrará o valor 100 para o campo Mat e Ari para o campo Nome armazenados temporariamente na tabela INSERTED. Araújo

17 ... Triggers ... TRIGGER FOR DELETE
CREATE TABLE Tabela (Mat INT, Nome VARCHAR(20)) CREATE TRIGGER Exclui ON Tabela FOR DELETE AS SELECT ‘Dados a serem excluídos: ’ SELECT * FROM DELETED Ao executar o comando DELETE FROM Tabela WHERE Mat = 100 o Trigger de nome Exclui será disparado e mostrará o valor 100 para o campo Mat e Ari para o campo Nome armazenados temporariamente na tabela DELETED. Araújo

18 ... Triggers ... TRIGGER FOR DELETE
CREATE TABLE Tabela (Mat INT, Nome VARCHAR(20)) CREATE TRIGGER Exclui ON Tabela FOR DELETE AS SELECT ‘Dados a serem excluídos: ’ SELECT * FROM DELETED Ao executar o comando DELETE FROM Tabela WHERE Mat = 100 o Trigger de nome Exclui será disparado e mostrará o valor 100 para o campo Mat e Ari para o campo Nome armazenados temporariamente na tabela DELETED. Araújo

19 ... Triggers ... TRIGGER FOR UPDATE
CREATE TABLE Tabela (Mat INT, Nome VARCHAR(20)) CREATE TRIGGER Atualiza ON Tabela FOR UPDATE AS BEGIN SELECT ‘Dados antigos:’ SELECT * FROM DELETED SELECT ‘Dados novos:’ SELECT * FROM INSERTED END Ao executar o comando UPDATE Tabela set Nom = ‘Gil’ where mat = 100 o Trigger de nome Atualiza será disparado e mostrará: o valor 100 para o campo Mat e Ari para o campo Nome armazenados temporariamente na tabela DELETED e o valor 100 para Mat e Gil para o campo Nome armazenados temporariamente na tabela INSERTED . Araújo

20 ...Triggers ... Por que usar Trigger?
Regras de negócio ficam armazenadas no banco de dados e são executadas não importando se a alteração foi promovida por programa de aplicação ou por comando SQL interativo Redução da complexidade de programas de atualização Araújo

21 ...Triggers Por que não abusar do uso de Trigger
Aumenta a complexidade do banco de dados Uma atualização do banco de dados pode provocar a execução de um trigger que altera o banco de dados que provoca a execução de outro trigger,... em cascata Araújo

22 Integridade Referencial Declarativa...
Depar - tabela “pai” Funci - tabela “filho” Depar (cdd, dsd) Funci (mat, nom, dep) create table depar (cdd char(1) not null, dsd varchar(20) primary key (cdd)) create table funci (mat integer not null, nom varchar(30), dep char(1), primary key (mat) foreign key (dep) references depar on delete set null) ao ser excluído um departamento, o atributo dep dos funcionários desse departamento ficará null Araújo

23 ...Integridade Referencial Declarativa
As opções para ON DELETE SET NULL - torna null o valor da chave estrangeira correspondente ao valor da chave primária da “linha pai” excluída CASCADE - exclui as “linhas filho” correspondentes à “linha pai” excluída RESTRICT (NO ACTION) - não exclui a “linha pai” se houver “linha filho” correspondente Araújo

24 Integridade via Constraints...
Uma forma de garantir integridade num bd Melhor que usar trigger, rule ou default Há constraints aplicáveis a linhas e a tabelas SQL Server suporta 5 classes de constraint: NOT NULL – uma coluna não pode ter valor NULL CHECK – define valores possíveis para uma coluna UNIQUE – coluna não pode ter valor repetido PRIMARY KEY – define PK de uma tabela FOREIGN KEY – define FK e aponta a tabela referenciada Araújo

25 ...Integridade via Constraints
CREATE TABLE fun (mat int CONSTRAINT pkFun PRIMARY KEY, nom varchar(30) CONSTRAINT nnNOM NOT NULL, cpf decimal(11) CONSTRAINT unCPF UNIQUE, sal decimal(7,2) CONSTRAINT ckSal CHECK (sal >= 940), sex char(1) CHECK (sex = 'M' or sex = 'F'), cdd char(1) CONSTRAINT fkDepa FOREIGN KEY references depa (cdd) on delete no action) Araújo


Carregar ppt "BANCO DE DADOS Araújo Lima Out / 2017 Araújo."

Apresentações semelhantes


Anúncios Google