MATB09 - Laboratório de Banco de Dados

Propaganda
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
Download