triggers e storeprocedures eros stein fabricio bellesa luiz borges mayko calazans
Post on 18-Mar-2016
33 Views
Preview:
DESCRIPTION
TRANSCRIPT
Triggers e StoreProcedures
Eros SteinFabricio Bellesa
Luiz BorgesMayko Calazans
Visão geral
Visão geral
Um dos bancos de dados mais populares do mundo.
Quem usa? NASA, Bradesco, HP, Nokia, Sony, U.S. Army, Google, etc...
Em 16/01/2008 a MySQL AB foi comprada pela Sun por 1 bilhão de dólares.
Características
Características
Altíssima portabilidade... Para quase todas as plataformas atuais.
Compatibilidade com varias linguagens de programação tão alta quanto a portabilidade.
Muito estável e de fácil manuseio. Livre com base na GPL(General Public License) Suporta triggers, stored procedures e functions. http://www.mysql.com/
Tabelas
Modelo anterior
Modelo atual
Razões das mudanças Mudanca 1:
Motivação: Manter histórico do gasto em cada compra, mesmo com alteração
do valor do produto Saídas:
Adicionamos valorPedido na tabela pedido Consequencias positivas
Permite descobrir o valor dos produtos vendidos em qualquer época.
Antes Depois
Razões das mudanças Mudança 2
Motivação: Ter controle sobre os produtos gastos durante as sessões de
tatuagem ou aplicação de bodypiercing. Saídas:
Criação da tabela produtosUtilizados.
Razões das mudanças Mudança 3
Motivação: Manter registradas as datas de admissão e demissão dos
funcionários, e resolver problemas com a re-contratação. Saídas:
Criação da tabela historicoFuncionario
Triggers O que é?
Objeto associado a uma tabela; É sempre disparado para responder algum evento
previsto: Comandos DML (INSERT, REPLACE, DELETE ou
UPDATE) Vários triggers podem ser associados a um mesmo BD. Os triggers podem ser disparados antes ou depois dos
eventos. Obs.: É importante definir um finalizador diferente de ; em
uma trigger.
TriggersCREATE TRIGGER `atualizaProdutosVendidos` AFTER INSERT ON `pedido`
FOR EACH ROW
BEGIN
CALL updateProduto(new.quantidade,new.codProduto);
END;
CREATE TRIGGER `atualizaProdutosUtilizados` AFTER INSERT ON `produtosutilizados`
FOR EACH ROW
BEGIN
CALL updateProduto(new.quantidade,new.codProduto);
END;
TriggersCREATE TRIGGER `atualizaHistorico` AFTER UPDATE ON `funcionario`
FOR EACH ROW
BEGIN
if(old.statuss = 'd')then
if(new.statuss = 'a') then
INSERT INTO historicoFuncionarioSET codHistoricoFuncionario = NULL,codFuncionario = OLD.codFuncionario,dataAdmissao = NOW(),dataDemissao = null;
end if;
end if;
if(old.statuss = 'a') then
if(new.statuss = 'd') then
call demiteFuncionario(OLD.codFuncionario); end if;
end if;
END;
TriggersCREATE TRIGGER `adimiteFuncioanario` AFTER INSERT ON `funcionario`
FOR EACH ROW
BEGIN
INSERT INTO historicoFuncionario SET
codHistoricoFuncionario = NULL,
codFuncionario = new.codFuncionario,
dataAdmissao = NOW(),
dataDemissao = null;
END
TriggersCREATE TRIGGER `atualizaProdutosVendidos` BEFORE INSERT ON
`pedido`
FOR EACH ROW
BEGINcall updateProduto(new.quantidade,new.codProduto);
set new.valorPedido = (select p.precofrom produto as pwhere p.codProduto = new.codProduto) * new.quantidade;
END
Stored Procedure O que é?
É um conjunto de comandos SQL que pode ser armazenados no servidor.
Os clientes não precisam reenviar os comandos individuais mas podem fazer referência às stored procedure(SP).
Usando um Trigger... Podem fornecer um aumento de desempenho:
Já que menos informação é enviada ao servidor, visto que, os SPs ficam no próprio servidor.
Em contra partida, pode gerar lentidão se existirem muitos acessos, já que, SPs favorecem o uso de processos Servidor bound.
Stored ProcedureCREATE PROCEDURE `demiteFuncionario`(IN `codFuncioarioEntrada` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
update historicoFuncionario set dataDemissao = now() where codFuncionario = codFuncioarioEntrada;
END
Stored ProcedureCREATE PROCEDURE `updateProduto`(IN `var` INT, IN `codP` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE produto
SET quantidadeEstoque = quantidadeEstoque - var
WHERE codProduto = codP;
END;
top related