Вы находитесь на странице: 1из 22

Functions e Triggers

IMPLEMENTAO DE BANCO DE DADOS


Prof. Henrique Leito
1

Funes (Function) - Exemplo


Criar uma funo para retornar o texto digitado:

create | function hello(texto char(20)) returns char(50) as $$ Begin return concat('Hello: ', texto, '!'); end; $$ language 'plpgsql';

delimiter -- teste a funo!

select hello('Joaquim'); select hello('Nome') as saida;

Funes (Function) - Exemplo


Continuando com funes, vamos criar uma tabela que contenha os nomes dos alunos de certa disciplina, com as notas dos dois bimestres e mostrando a mdia final. Primeiro vamos criar as tabelas e inserir registros.
create table nota ( aluno varchar(20), bim1 float, bim2 float ); insert into nota (aluno, bim1, bim2) Values ('Maria', 8.00, 6.00), ('Pedro', 7.00, 9.00), ('Antonio', 6.50, 8.50); Select * from nota;

Funes (Function) - Exemplo


Criando a funo para verificar

a mdia.

create function media_nota(nome_aluno varchar(20)) returns float as $$ declare n1 float;n2 float;media float; begin select bim1, bim2 into n1 , n2 from nota where aluno = nome_aluno; media := (n1+n2)/2; return media; end; $$ language 'plpgsql'; -- Utilizando a funo media_nota para o aluno Pedro; select media_nota('Pedro');

Funes (Function) - Exemplo


Criando uma nova funo para verificar

a mdia.

-- Criar uma nova tabela chamada nota_nova create table nota_nova ( aluno char(20), nota1 float, nota2 float, nota3 float, nota4 float ); insert into nota_nova (aluno, nota1, nota2, nota3, nota4) values ('Pedro', 5.00, 6.50, 7.50, 6.50), ('Maria', 10.00, 9.00, 10.00, 8.00), ('Antonio', 7.00, 8.50, 9.50, 7.50); select
* from nota_nova;

-- PARA APAGAR A FUNO: drop function NOME_FUNCAO;

Funes (Function) - Exemplo


Criando uma nova funo para verificar

a mdia.

create function media_nota_nova(nome_aluno varchar(20)) returns float as $$ declare n1 float;n2 float;n3 float;n4 float; media float; begin select nota1, nota2, nota3, nota4 into n1 , n2 , n3 , n4 from nota_nova where aluno = nome_aluno; media := (n1+n2+n3+n4)/4; return media; end; $$ language 'plpgsql'; -- utilizando a funcao select media_nota_nova('Pedro');

Triggers (Gatilhos) - O que ?


Procedimento disparado automaticamente pelo SGBD em

resposta a um evento especfico do banco de dados. Semelhante a um procedimento armazenado (Stored Procedure) mas tem a sua execuo disparada pelo SGBD quando ocorre um evento preestabelecido. O evento associado tentativa de execuo de operaes sobre uma tabela (incluso, excluso e alterao).

Trigger - Requisitos
Especificar quando o trigger deve ser executado Isso desmembrado em um evento que faz com que o

trigger seja verificado. uma condio que precisa ser satisfeita para que a execuo do trigger prossiga.
Especificar as aes a serem tomadas quando o trigger

executar.
Regras ECA Evento Condio Ao

Trigger - Armazenamento
Os triggers so armazenados como se fossem dados normais,

o que os torna persistentes e acessveis para todas as operaes no banco de dados. Uma vez que um trigger armazenado, o SGBD assume a responsabilidade de execut-lo quando o evento especificado ocorre e a condio correspondente satisfeita.

10

Trigger - Para Que Serve?


Preenchimento de campo resultante de uma expresso. Crtica aos dados com mensagens mais adequadas s regras

do negcio. Acessos que alterem linhas de uma tabela ou eventos que ocorram no BD podem ser registrados em outra tabela (auditoria). assegurar as restries de integridade. melhorar a segurana no acesso aos dados. melhorar o desempenho das aplicaes. reduzir o volume de dados trafegados na rede. melhorar a manuteno do software.

11

Trigger - Exemplo
Supondo que um cliente de um banco faa uma retirada de

dinheiro maior do que o seu saldo, o BD age da seguinte forma: Altera para zero o saldo do cliente Cria um emprstimo no valor da dvida para o cliente

Um depsito deseja manter um estoque mnimo de cada item Quando o estoque deste item fica menor do que o nvel

mnimo estipulado, um pedido deve ser adicionado automaticamente lista de pedidos

12

Triggers em SQL
Passaram a ser padro SQL em 1999; Cada SGBD utiliza sua prpria linguagem e sintaxe para

triggers; Ativao da Triggers: Antes ou depois de algum evento de adio (insert), atualizao (update) e remoo (delete) Utilizada para verificao dos dados antes ou depois da realizao do evento;

13

Triggers em SQL - Exemplo


Vamos comear com um exemplo bem simples: -- CRIACAO DE UMA TABELA QUE IR SER ALTERADA E IR -- DISPARAR A TRIGGER create table alterada( cod serial primary key, valor varchar(50) ); -- CRIACAO DE UMA TABELA QUE IR GUARDAR AS AES DE AUDITORIA DISPARADO PELA A TRIGGER create table log( cod serial primary key, data date, autor varchar(20), alteracao varchar(6) );

Triggers em SQL - Exemplo


CRIANDO FUNO QUE IR SER DISPARADA PELA TRIGGER. -- A FUNO IR INSERIR UM REGISTRO DENTRO DA TABELA LOG create function gera_log() returns trigger as $$ Begin insert into log (data, autor, alteracao) values (now(), user, TG_OP); return new; end; $$ language 'plpgsql';

Triggers em SQL - Exemplo


Criando a trigger: -- CREATE TRIGGER

create trigger tr_gera_log after insert or update or delete on alterada for each row execute procedure gera_log();

Triggers em SQL - Exemplo


Testando a trigger: -- REGISTROS ANTES DE REALIZA ALGUMA AO DENTRO DA TABELA ALTERADA select * from alterada; select * from log; -- INSERINDO REGISTRO NA TABELA ALTERADA insert into alterada (cod,valor ) values (DEFAULT,'teste'); delete from alterada where valor like 'teste'; update alterada set valor='novoteste' where valor like 'teste'; -- REGISTROS DEPOIS DE REALIZA ALGUMA AO DENTRO DA TABELA ALTERADA select * from alterada; select * from log;

Tipos de Trigger
Vamos verificar

alguns tipos de trigger:

22

Trigger - Eventos e variveis de contexto


possvel combinar alguns dos modos, desde que tenham a

operao de AFTER ou BEFORE em comum:

23

Trigger - Variveis de ambiente


Quando um trigger afeta vrias linhas, podemos, consultar ou

modificar os valores antigos e novos dos campos da linha sendo alterada, atravs das variveis de ambiente:

:old representa a linha corrente prvia :new representa a linha aps a alterao

24

Tipos de Trigger
OBS: * - Alterar o valor das variveis

causar qualquer efeito prtico

nesses eventos no

25

Quando no usar triggers


Triggers devem ser utilizados com cuidado. Erros na execuo do trigger podem causar a falha nas

funes de incluir/ deletar/ atualizar da funo que o disparou. Um trigger pode disparar outro trigger. No pior caso ocorre uma cadeia infinita de triggers. Ex.: A insero em uma relao dispara um trigger que insere uma nova tupla na mesma tabela.

26

Triggers x Procedures/Functions
Comparativo:

27

Вам также может понравиться