MATB09 - Laboratório de Banco de Dados Stored Procedure e Triggers Profª. Daniela Barreiro Claro e Denildo Machado (Monitor) Stored Procedure(SP) • São procedimentos armazenados de modo persistente Stored Procedure(SP) • É usado para armazenar "parte da aplicação" no banco de dados SP(Por que usar?) • • Utilizado para realizar validação de dados, "livrando" a aplicação desta tarefa(ex: controle de acesso e validação de informações) Os SPs podem consolidar e centralizar a lógica que foi originalmente implementada na aplicação. SP(Por que usar?) • • • Processamento extenso ou complexo que requer a execução de várias instruções SQL pode ser direcionado aos procedimentos armazenados, e todas as aplicações chamarem os procedimentos Reduz a duplicidade dos esforços e melhora a modularidade Reduz o tráfego de dados entre o cliente e o servidor SP(como criar?) • Forma geral de criação CREATE PROCEDURE <nome do procedimento> (<parametros>) <declaracao de variaveis> <corpo do procedimento> SP(como criar?) • Exemplo no MySQL CREATE PROCEDURE proc_name([parameters, ...]) [characteristics] [BEGIN] corpo_da_rotina; [END] SP(exemplo no MySQL) DELIMITER // CREATE PROCEDURE mySp_correntistaUpdate(v_id INT, v_nome VARCHAR(60), v_cpf VARCHAR(20)) BEGIN IF (((v_id > 0) && (v_id != '') ) && (v_nome != '') && (v_cpf != '')) THEN UPDATE tbl_correntista SET correntista_nome =v_nome, correntista_cpf =v_cpf WHERE correntista_id =v_id; ELSE SELECT 'Os novos NOME e CPF devem ser informados!' AS Msg; END IF; END; // DELIMITER ; SP(e depois de criado?) • A forma geral de chamada de SP é: CALL procedure(...) ou EXECUTE procedure( ... ) • No nosso exemplo: CALL mySp_correntistaUpdate(1, ‘Denildo Machado’, ’123.123.111-11′); SP(observações) • • • • • SPs podem chamar outras SPs SPs pode retornar um conjunto de resultados Resultados vindos de SPs podem ser utilizados por outros SPs(através de cursores) Os SPs podem receber variáveis, retornar resultados ou modificar as variáveis e devolvêlos, SPs podem utilizar estruturas de controle de fluxo como IF, WHILE, LOOP, REPEAT Triggers(Gatilhos) • São regras(SPs especiais) que especificam ações disparadas automaticamente por meio de certos eventos(Update, Insert ou Delete). • Podem ser executados sobre tabelas ou views • Segue o modelo ECA o Evento-Condição-Ação Triggers(modelo ECA) • Evento o o • São os eventos que ativam as regras. São operações de atualização em banco de dados aplicadas explicitamente Condição o o 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 Triggers (modelo ECA) • Ação É a ação a ser executada o É uma série de declarações SQL, mas também pode ser uma transação ou uma SP o Triggers(Quando usar?) • Construção de tabelas de log • Construção de tabelas de auditoria • Automatizar tarefas de inserção(ex: empregado) • Manter a integridade da aplicação(ex: Saque Bc) • Impor regras de negócio(ex: obrigar que toda • nota fiscal tenha ao menos um produto) Executar as regras de negócio (por exemplo, notificar um gerente que os dados da conta de um usuário foi alterada) Triggers(Quando usar?) • Replicar os dados (ex: armazenar um registro de cada mudança, para ser enviado a outro banco de dados mais tarde) Triggers(no MySQL) CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_bodytrigger_time: { BEFORE | AFTER }trigger_event: { INSERT | UPDATE | DELETE } Triggers (Exemplo no MySQL) DELIMITER $$CREATE TRIGGER `Mytrigger`AFTER INSERT ON Table_CurrentFOR EACH ROWBEGIN UPDATE Table_Record SET `Value` = NEW.`Value` WHERE `Name` = NEW.`Name` AND `Value` < NEW.`Value`; END $$ DELIMITER; Links úteis Stored Procedures http://en.wikipedia.org/wiki/Stored_procedure http://imasters.com.br/artigo/223/sql-server/criacao-e-uso-de-storedprocedures/ http://imasters.com.br/artigo/7556/mysql/stored-procedures-no-mysql/ Triggers http://www.macoratti.net/sql_trig.htm http://en.wikipedia.org/wiki/Database_trigger http://pt.wikipedia.org/wiki/Gatilho_(banco_de_dados) http://www.devmedia.com.br/introducao-a-triggers/1695