Stored Procedures e Triggers Prof. Daniela Barreiro Claro Stored Procedures São procedimentos armazenados de modo persistente São uteis nas seguintes circunstâncias: Programa de BD é necessario para varias aplicações, pode ser armazenado no servidor e invocado por quaisquer programas. Reduz a duplicação dos esforços e melhora a modularidade Executar um programa no servidor para reduzir a transferência de dados cliente/servidor Prof. Daniela Barreiro Claro 2 Stored Procedures Forma geral de criação CREATE PROCEDURE <nome do procedimento>(<parametros>) <declarações locais> <corpo do procedimento> Prof. Daniela Barreiro Claro 3 Triggers (Gatilhos) Os triggers fazem parte da SQL 99 São regras que especificam ações disparadas automaticamente por meio de certos eventos. Segue o modelo ECA Evento-Condição-Ação Evento São os eventos que ativam as regras. São operações de atualização em banco de dados aplicadas explicitamente Prof. Daniela Barreiro Claro 4 Triggers (Gatilhos) Condição É a condição que determina se a ação da regra deve ser executada Uma vez ocorrido o evento, uma condição opcional pode ser avaliada Se a condição for avaliada o seu resultado deve ser verdadeiro para que a ação da regra seja disparada Prof. Daniela Barreiro Claro 5 Triggers (Gatilhos) Ação É a ação a ser executada É normalmente uma série de declarações SQL, mas também pode ser uma transação ou uma SP. Prof. Daniela Barreiro Claro 6 Exemplo de Triggers no MySQL CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW INSERT INTO test2 SET a2 = NEW.a1; INSERT INTO test1 VALUES (1); create trigger trg1 before insert on t1 for each row set @a:=new.a; Prof. Daniela Barreiro Claro 7 Exemplo de Trigger no PG create table teste( a varchar(255), b varchar(255)) create table teste2( c varchar(255), d varchar(255), hora date) CREATE LANGUAGE plpgsql; create function gera_log() returns trigger as $$ Begin insert into teste2(c,d, hora) values (TG_OP, user, now()); return new; end; $$ language 'plpgsql'; create trigger trg_log after insert or update or delete on teste for each row execute procedure gera_log(); Prof. Daniela Barreiro Claro 8