Você está na página 1de 34

Banco de Dados II

Dr. Celso Luiz de


Souza
SQL - Instruções Programadas
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor
Estrutura -
Condicionais
Banco de Dados II
Estrutura -
Repetição Gestão da Tecnologia da Informação
Procedimento
(Procedure)

Função
(Function) Dr. Celso Luiz de Souza
Gatilhos
(Trigger)
IF Sudeste MG

Abril de 2019 - Revisão outubro de 2020

São João del-Rei

1/34
Banco de Dados II

Dr. Celso Luiz de


Souza
1 Modelo Relacional adotado
Modelo
Relacional
adotado

Introdução 2 Introdução
Estrutura
Estrutura -
Estrutura
Cursor
Estrutura -
Estrutura - Cursor
Condicionais
Estrutura -
Estrutura - Condicionais
Repetição
Estrutura - Repetição
Procedimento
(Procedure)

Função
(Function) 3 Procedimento (Procedure)
Gatilhos
(Trigger)

4 Função (Function)

5 Gatilhos (Trigger)

São João del-Rei

2/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Visão do modelo relacional adotado
Modelo realiza
Relacional ID VARCHAR(5) aluno

adotado id_curso VARCHAR(8) ID VARCHAR(5)

id_sec VARCHAR(8) nome VARCHAR(20)

Introdução semestre VARCHAR(9) nome_dept VARCHAR(20)

ano DECIMAL(4,0) curso tot_cred DECIMAL(3,0)


Estrutura Indexes
nota VARCHAR(2) id_curso VARCHAR(8) prereq
Estrutura - Indexes titulo VARCHAR(50) id_curso VARCHAR(8)
Cursor
nome_dept VARCHAR(20) prereq_id VARCHAR(8)
Estrutura - creditos DECIMAL(2,0) Indexes
Condicionais Indexes
Estrutura -
Repetição secao
id_curso VARCHAR(8) periodo
departamento
Procedimento id_sec VARCHAR(8) id_periodo VARCHAR(4)
nome_dept VARCHAR(20)
(Procedure) semestre VARCHAR(9) dia VARCHAR(1)
hora_inicial DECIMAL(2,0) predio VARCHAR(15)
ano DECIMAL(4,0)
orcamento DECIMAL(12,2)
Função predio VARCHAR(15) min_inicial DECIMAL(2,0)
Indexes
(Function) numero_sala VARCHAR(7) hora_final DECIMAL(2,0)

id_periodo VARCHAR(4) min_final DECIMAL(2,0)

Gatilhos dia VARCHAR(1) Indexes


mentor
(Trigger) Indexes
instrutor
id_est VARCHAR(5)
id_inst VARCHAR(5)
ministra ID VARCHAR(5)
Indexes
ID VARCHAR(5) nome VARCHAR(20)
id_curso VARCHAR(8) nome_dept VARCHAR(20)
sala id_sec VARCHAR(8) salario DECIMAL(8,2)
predio VARCHAR(15) semestre VARCHAR(9) Indexes
numero_sala VARCHAR(7) ano DECIMAL(4,0)
capacidade DECIMAL(4,0) Indexes
Indexes

São João del-Rei Figura: Modelo Relacional exemplificado.


3/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Introdução
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor
Um Stored Procedure constituem em um segmento de instruções declarativas em SQL
Estrutura -
Condicionais
que são armazenadas no catálogo do banco de dados.
Estrutura -
Repetição
Um procedimento armazenado pode ser invocado ou chamado por acionadores por outros
Procedimento procedimentos e aplicativos de outras linguagens como Java, Python, PHP.
(Procedure)
São 3 tipos de procedimentos armazenados:
Função
(Function) • Procedimentos (Stored procedures);
Gatilhos
(Trigger) • Funções (Functions);
• Gatilhos (Triggers).

São João del-Rei

4/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor
PL/SQL (Procedural Language/SQL) blocos estruturados de código e comandos são uma
Estrutura -
Condicionais
extensão da SQL, que incorpora recursos de linguagens de programação procedurais.
Estrutura -
Repetição
Essa linguagem permite construir dos SQL para acesso e manipulação da base de dados.
Procedimento Estrutura de bloco programavél em SQL:
(Procedure)

Função
• DECLARE variáveis, cursores, exceções definidas pelo usuário
(Function)
• BEGIN instruções SQL e instruções PL/SQL
Gatilhos
(Trigger)
• EXCEPTION ações a serem desempenhadas quando ocorrem erros
• END finalizar

São João del-Rei

5/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura
Modelo
Relacional
adotado

Introdução
Operadores, operação e a prioridade (de cima para baixo):
Estrutura
Estrutura - 1 ** , NOT (exponenciação, negação lógica)
Cursor
Estrutura -
Condicionais 2 + , - (identidade, negação)
Estrutura -
Repetição 3 * , / (multiplicação, divisão)
Procedimento
(Procedure) 4 + , - , || (adição, subtração, concatenação)
Função
(Function) 5 = , != , < , > , <= , >= , (comparação)
Gatilhos
(Trigger)
6 LIKE, IS NULL, (comparação)
7 BETWEEN, IN (comparação)
8 AND (conjunção)
9 OR (disjunção)

São João del-Rei

6/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura
Modelo Blocos podem ser aninhados uns dentro dos outros, inclusive na sessão exceção
Relacional
adotado
BEGIN
Introdução // a c o e s do b l o c o p r i n c i p a l
Estrutura
Estrutura -
DECLARE
Cursor // d e c l a r a c a o de o b j e t o s
Estrutura -
Condicionais BEGIN
Estrutura - // a c o e s do b l o c o i n t e r n o
Repetição
Procedimento
EXCEPTION
(Procedure) // o que f a z e r na o c o r r e n c i a de e r r o s do b l o c o i n t e r n o
Função END
(Function) // o u t r a s a c o e s do b l o c o p r i n c i p a l
Gatilhos EXCEPTION
(Trigger)
WHEN o c o r r e n c i a D e E r r o s THEN
BEGIN
// a c o e s do b l o c o i n t e r n o do e x c e p t i o n
EXCEPTION
// a c o e s a s e r e m tomadas em c a s o de e r r o s no b l o c o
i n t e r n o do e x c e p t i o n
END
São João del-Rei
END
7/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura
Modelo
Relacional
Um identificador é visível no bloco no qual foi declarado e em todos os procedimentos,
adotado
funções e sub-blocos aninhados.
Introdução
Estrutura DECLARE
Estrutura -
Cursor x number ;
Estrutura - BEGIN
Condicionais
Estrutura - ...
Repetição
DECLARE
Procedimento y number ;
(Procedure)
BEGIN
Função
(Function) ...
Gatilhos
...
(Trigger) END ;
...
END ;

• A variável “x” pode ser usada em toda a extensão do bloco PL/SQL.


• A variável “y” só pode ser referenciada dentro do bloco mais interno onde ela foi
São João del-Rei
declarada.
8/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor
Estrutura -
Condicionais
Um bloco não é uma unidade de transação. Os comandos COMMIT, SAVEPOINT e
Estrutura -
Repetição
ROLLBACK são independentes dos blocos, mas podem ser emitidos em um bloco.
Procedimento
(Procedure)
PL/SQL não suporta instruções em DDL (Data Definition Language) como, por exemplo,
Função CREATE TABLE, ALTER TABLE ou DROP TABLE.
(Function)

Gatilhos PL/SQL não suporta instruções em DCL (Data Control Language) como, por exemplo,
(Trigger)
GRANT ou REVOKE.

São João del-Rei

9/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura - Cursor
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor
Estrutura -
Condicionais
Estrutura - Cursor é uma área de memória na qual um comando SQL é analisado e executado.
Repetição
Procedimento
Há dois tipos de cursores:
(Procedure)
• Cursores implícitos: gerenciado automaticamente pelo PL/SQL.
Função
(Function) • Cursores explícitos: declarado pelo programador
Gatilhos
(Trigger)

São João del-Rei

10/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura - Cursor
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor Atributos do Cursor implícito:
Estrutura -
Condicionais
Estrutura -
• SQL%ROWCOUNT: valor inteiro representando o número de linhas afetadas pela
Repetição
última instrução SQL executada.
Procedimento
(Procedure)
• SQL%FOUND: atributo booleano contendo TRUE se pelo menos uma linha foi
Função
(Function) afetada pela última instrução SQL, e FALSE, caso contrário.
Gatilhos
(Trigger)
• SQL%NOTFOUND: atributo booleando contendo TRUE se nenhuma linha foi
afetada pela última instrução SQL, e FALSE, caso contrário.

São João del-Rei

11/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura - Condicionais
Modelo
Relacional
adotado

Introdução Uma condição pode envolver os operadores lógicos AND, OR e NOT.


Estrutura
Estrutura -
Cursor
Qualquer expressão contendo um valor nulo é avaliada como NULL (a condição não será
Estrutura -
Condicionais
verdadeira), exceto uma expressão concatenada, que trata os valores nulos como uma
Estrutura -
Repetição
string vazia.
Procedimento
(Procedure)
I F c o n d i c a o THEN
// i n s t r u c o e s ;
Função
(Function) [ ELSIF c o n d i c a o THEN
Gatilhos
// i n s t r u c o e s ;
(Trigger) ] . . .
[ ELSE
// i n s t r u c o e s ;
]
END I F

São João del-Rei

12/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura - Repetição
Modelo
Relacional
adotado Repetição por meio de label.
Introdução
Estrutura
LOOP
Estrutura - instrucao1 ;
Cursor
Estrutura -
. . .
Condicionais EXIT [WHEN c o n d i c a o ] ;
Estrutura -
Repetição END LOOP ;
Procedimento
(Procedure) Instrução EXIT: termina o loop. Se WHEN for usado, o loop termina se a condição for
Função
(Function)
verdadeira.
Gatilhos . . .
(Trigger)
v_cont := 0 ;
LOOP
INSERT INTO . . .
v_cont := v_cont + 1 ;
EXIT WHEN v_cont >= 1 0 ;
END LOOP ;

São João del-Rei

13/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura - For
Modelo
Relacional
adotado

Introdução FOR c o n t a d o r IN [ REVERSE ] limiteInferior .. L i m i t e S u p e r i o r LOOP


Estrutura instrucao1 ;
Estrutura -
Cursor . . .
Estrutura -
Condicionais END LOOP ;
Estrutura -
Repetição
Os limites inferior e superior podem ser literais, variáveis ou expressões, mas devem ser
Procedimento
(Procedure) avaliados para inteiros.
Função
(Function) Contador é incrementado (ou decrementado, com REVERSE) automaticamente de uma
Gatilhos
(Trigger)
unidade.
FOR v_cont IN 1 . . 1 0 LOOP
INSERT INTO . . .
. . .
END LOOP ;

São João del-Rei

14/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Estrutura - While
Modelo
Relacional
adotado

Introdução
WHILE c o n d i c a o LOOP
Estrutura
Estrutura - instrucao1 ;
Cursor . . .
Estrutura -
Condicionais END LOOP ;
Estrutura -
Repetição
Procedimento
O loop é repetido enquanto a condição for verdadeira.
(Procedure)

Função . . .
(Function)
v_cont := 0 ;
Gatilhos
(Trigger)
WHILE v_cont < 10 LOOP
INSERT INTO . . .
v_cont := v_cont + 1 ;
END LOOP ;

São João del-Rei

15/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Procedimento (Procedure)
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor Stored procedures
Estrutura -
Condicionais
Estrutura -
São rotinas definidas no SGBD, são identificadas pelo nome no qual podem ser invoca-
Repetição
das(chamadas). Em geral pode executar uma série de instruções, receber parâmetros e
Procedimento
(Procedure) retornar valores.
Função
(Function)
Permitem a implementação de regras de negócio a nível de servidor de banco de dados.
Gatilhos
(Trigger)
Fornecem um mecanismo eficiente de reutilização de código. Aumentam a performance
de aplicativos cliente-servidor, ao diminuir o tráfego de rede.

São João del-Rei

16/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Procedimento (Procedure)
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
DELIMITER
Cursor CREATE PROCEDURE nome_procedimento ( p a r a m e t r o s )
Estrutura -
Condicionais BEGIN
Estrutura -
Repetição /∗CORPO DO PROCEDIMENTO∗/
Procedimento
END
(Procedure) DELIMITER ;
Função
(Function)

Gatilhos
Para excluir um procedimento criado
(Trigger)
DROP PROCEDURE nome_procedimento ;

Parâmetros: (MODO nome TIPO, MODO nome TIPO, MODO nome TIPO)

São João del-Rei

17/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Procedimento (Procedure)
Modelo
Relacional
adotado

Introdução
Estrutura
Modo dos parâmetros:
Estrutura -
Cursor • IN: parâmetro de entrada (recebe um valor na chamada). O parâmetro passado
Estrutura -
Condicionais pode receber uma expressão, uma constante ou uma variável.
Estrutura -
Repetição
• OUT: parâmetro de saída (retorna um valor na chamada). O parâmetro passado
Procedimento
(Procedure) deve ser uma variável.
Função
(Function)
• INOUT: parâmetro de entrada e saída (recebe e retorna um valor na chamada). O
Gatilhos parâmetro passado deve ser uma variável.
(Trigger)

Chamar um stored procedure:


CALL nome_procedimento ( p a r a m e t r o s ) ;

São João del-Rei

18/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Procedimento (Procedure) - Exemplo
Modelo
Relacional
adotado

Introdução Avalie o exemplo de reajuste salarial abaixo:


Estrutura
Estrutura -
Cursor d e l i m i t e r //
Estrutura -
Condicionais
CREATE PROCEDURE r e a j u s t e S a l D e p t o ( IN p e r c d o u b l e , IN d e p t o INT )
Estrutura - BEGIN
Repetição
UPDATE Empregado
Procedimento
(Procedure)
SET s a l a r i o = s a l a r i o ∗ ( 1 + p e r c / 1 0 0 )
WHERE Empregado . numDep = d e p t o ;
Função
(Function) END//
Gatilhos
(Trigger) Chamar o procedimento:
call reajusteSalDepto (10 ,6) ;

Exercício: Faça o mesmo para base da Universidade utilizada como modelo.

São João del-Rei

19/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Procedimento (Procedure) - Exemplo
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor
Estrutura -
Condicionais
Resposta do Exercício.
Estrutura -
Repetição c r e a t e p r o c e d u r e r e a j u s t e S a l D e p t o ( i n p e r c i n t , i n nomeDepto v a r c h a r ( 2 0 ) )
Procedimento begin
(Procedure) UPDATE i n s t r u t o r
Função SET s a l a r i o = s a l a r i o ∗ ( 1 + p e r c / 1 0 0 )
(Function)
WHERE nome_dept = nomeDepto ;
Gatilhos
(Trigger)
end //

São João del-Rei

20/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Funções Function
Modelo
Relacional
adotado Funções (Functions)
Introdução
Estrutura
Funções também são blocos nomeados, muito semelhantes às Stored Procedures. A
Estrutura -
Cursor
diferença principal é que as Funções obrigatoriamente devem retornar um valor.
Estrutura -
Condicionais
As funções são muito utilizadas para computar valores, permitindo a reusabilidade e a
Estrutura -
Repetição
facilidade de manutenção e podem ser chamadas a partir de outros blocos.
Procedimento
(Procedure)
Logo pode-se dizer que a diferença básica é:
Função • A Função (Function) deve retornar um valor, mas em Procedimento (Procedure) o
(Function)
retorno é opcional.
Gatilhos
(Trigger)
• As funções podem ter apenas parâmetros de entrada. Os procedimentos podem ter
parâmetros de entrada / saída.
• Funções podem ser chamadas de dentro de procedimentos, no entanto as funções
não pode invocar uma função.
Veja mais em: &+#codigosimples.net/2016/02/24/principais-diferencas-entre-stored-
São João del-Rei
procedures-e-functions
21/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Função Function
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor CREATE FUNCTION f u n c t i o n _ n a m e ( param1 , param2 , â )
Estrutura - RETURNS d a t a t y p e
Condicionais
Estrutura - [NOT] DETERMINISTIC
Repetição
BEGIN
Procedimento
(Procedure) ....
Função
END ;
(Function)

Gatilhos
(Trigger) Chamando a função:
s e l e c t nome_funcao ( p a r a m e t r o ) ;

São João del-Rei

22/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Função Function
Modelo
Relacional
adotado

Introdução
Estrutura
Exemplo de um procedimento para dizer Hello a uma pessoa!
Estrutura -
Cursor CREATE FUNCTION h e l l o ( s v a r c h a r ( 2 0 ) ) RETURNS v a r c h a r ( 5 0 )
Estrutura -
Condicionais DETERMINISTIC
Estrutura - begin
Repetição
Procedimento
RETURN CONCAT( ’ H e l l o , ’ , s , ’ ! ’ ) ;
(Procedure) end
Função
(Function)

Gatilhos
Chamando a função:
(Trigger)
select h e l l o ( ’ Maria ’ ) ;

Exercício: Faça uma função que retorne a media salarial de um determinado departa-
mento passado na chamada.

São João del-Rei

23/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Função Function
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor Resposta do Exercício.
Estrutura -
Condicionais
Estrutura -
CREATE FUNCTION M e d i a S a l a r i o ( nomeDepto v a r c h a r ( 2 0 ) ) RETURNS d o u b l e
Repetição DETERMINISTIC
Procedimento BEGIN
(Procedure)
d e c l a r e v_media d o u b l e ;
Função
(Function)
SELECT AVG( s a l a r i o ) INTO v_media FROM i n s t r u t o r WHERE nome_dept =
nomeDepto ;
Gatilhos
(Trigger) RETURN v_media ;
END

São João del-Rei

24/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Função Function
Modelo
Relacional
adotado
Outro Exemplo (1/2):
Introdução
Estrutura DELIMITER
Estrutura -
Cursor
Estrutura - CREATE FUNCTION L e v e l I n s t r u t o r ( v a l o r S a l a r i o d o u b l e ) RETURNS VARCHAR( 1 0 )
Condicionais
Estrutura - DETERMINISTIC
Repetição
BEGIN
Procedimento
(Procedure) DECLARE msg v a r c h a r ( 1 0 ) ;
Função
I F v a l o r S a l a r i o > 70000 THEN
(Function) SET msg = ’ D o c t o r ’ ;
Gatilhos ELSEIF ( v a l o r S a l a r i o <= 70000 AND v a l o r S a l a r i o >= 2 0 0 0 0 ) THEN
(Trigger) SET msg = ’ M a s t e r ’ ;
ELSEIF v a l o r S a l a r i o < 20000 THEN
SET msg = ’ B a c h e l o r ’ ;
END I F ;

RETURN ( msg ) ;
END
São João del-Rei

25/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Função Function
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor
Estrutura -
Condicionais
Estrutura - Outro Exemplo (2/2): Chamando a função em uma consulta.
Repetição
Procedimento SELECT nome , L e v e l I n s t r u t o r ( s a l a r i o ) a s N i v e l
(Procedure)
FROM i n s t r u t o r
Função
(Function)
ORDER BY N i v e l ;
Gatilhos
(Trigger)

São João del-Rei

26/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Gatilhos Trigger
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Trigger
Cursor
Estrutura - Gatilho é um tipo especial de procedimento, associado a uma tabela, que é disparado auto-
Condicionais
Estrutura - maticamente por um evento de modificação de dados (INSERT, UPDATE, DELETE)
Repetição
Procedimento
em uma determinada tabela.
(Procedure)
Usos comuns de triggers:
Função
(Function)
• Manter regras de integridade além de uma simples integridade referencial.
Gatilhos
(Trigger) • Implementar regras de negócio complexas no banco de dados.
• Aplicar regras de segurança.
• Manter registros de auditoria.

São João del-Rei

27/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Gatilho Trigger
Modelo
Vantagens dos gatilhos triggers:
Relacional
adotado • Fornecem uma maneira alternativa de verificar a integridade dos dados.
Introdução
Estrutura
• Permite a detecção de erros na lógica de negócios na camada do banco de dados.
Estrutura -
Cursor • Alternativa de execução de tarefas agendadas (não precisa esperar para executar as
Estrutura -
Condicionais tarefas agendadas, porque os acionadores são invocados automaticamente antes ou
Estrutura -
Repetição depois de uma alteração dos dados em uma ou mais tabelas).
Procedimento
(Procedure) • São úteis para auditar as mudanças dos dados.
Função
(Function)
Desvantagens dos gatilhos triggers:
Gatilhos
(Trigger) • Só possuem uma validação e não podem substituir todas as validaçõe (validações
simples precisam ser feitas na camada de aplicativo, como por exemplo, validar as
entradas usando JavaScript ou no lado do servidor usando linguagens de script do
lado do servidor, como JSP, PHP, ASP.NET, Perl.
• São invocados e executados de forma invisivel a partir dos aplicativos clientes, por-
tanto, é difícil descobrir o que acontece na camada do banco de dados.
São João del-Rei

• Podem aumentar a sobrecarga do servidor de banco de dados.


28/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Gatilho Trigger
Modelo
Relacional
adotado A trigger deve-se definir o sincronismo, o evento e o tipo de disparo.
Introdução
Estrutura Evento
Estrutura -
Cursor O evento está relacionado há modificação de dados na(s) tabela(s), sendo as modificações
Estrutura -
Condicionais causadas por meio de um dos comando de (INSERT, UPDATE, DELETE).
Estrutura -
Repetição
Procedimento Sincronismo
(Procedure)
define o momento de disparo em relação ao evento. Valores possíveis: BEFORE (dispa-
Função
(Function) rado antes do evento) e AFTER (disparado depois do evento).
Gatilhos
(Trigger)
Tipo de disparo
Define o número de vezes que o corpo do gatilho (trigger ) é executado. Os valores
possíveis: são: FOR EACH ROW (Linha – o corpo do trigger é executado uma vez para
cada linha afetada pelo comando de manipulação de dados) e opção default (Instrução
– o trigger é executado apenas uma vez para cada comando de manipulação de dados).
São João del-Rei

29/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Gatilho Trigger
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura - Uma combinação de sincronismo, evento e tipo de disparo pode levar até a 12 tipos
Cursor
Estrutura -
Condicionais
diferentes de triggers associados a uma mesma tabela.
Estrutura -
Repetição Estrutura de uma gatilho:
Procedimento
(Procedure) CREATE TRIGGER n o m e _ t r i g g e r s i n c r o n i s m o _ t r i g g e r t i p o _ e v e n t o
Função ON nome_tabela
(Function)
FOR EACH ROW
Gatilhos BEGIN
(Trigger)
...
END ;

São João del-Rei

30/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Gatilho Trigger
Modelo
Relacional
adotado Exemplo de Tigger - Deseja-se controlar as alterações dos salários dos instrutores, logo,
Introdução o projetista viu que era necessário ter a seguinte tabela para auditoria das modificações
Estrutura
Estrutura - dos salários dos instrutores:
Cursor
Estrutura - CREATE TABLE i n s t r u t o r A u d i t (
Condicionais
Estrutura - i d INT AUTO_INCREMENT, −−e n u m e r a d o r d o s e v e n t o s de a t u a l i z a c a o
Repetição
i d I n s t r u t o r INT NOT NULL , −−i d do i n s t r u t o r que a l t e r o u o s a l a i r o
Procedimento
(Procedure) s a l a r i o A n t i g o d e c i m a l ( 8 , 2 ) NOT NULL , −− s a l a r i o a n t i g o
Função
s a l a r i o A t u a l d e c i m a l ( 8 , 2 ) NOT NULL , −− s a l a r i o novo
(Function) d a t a M o d i f i c a c a o DATETIME DEFAULT NULL , −−d a t a que m o d i f i c o u
Gatilhos a c a o VARCHAR( 5 0 ) DEFAULT NULL , −− t i p o de m o d i f i c a c a o
(Trigger) c o n s t r a i n t pk_instutor_audit primary key ( i d )
);

Logo, deseja-se que toda alteração que ocorra no salário de um instrutor seja registrado
na tabela de auditoria. Tem-se que o sincronismo será após (BEFORE), e o evento será
de atualização (UPDATE). Qual seria o gatilho (TRIGGER)?
São João del-Rei

31/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Gatilho Trigger
Modelo
Relacional
adotado

Introdução
Gatilho projetado:
Estrutura
Estrutura - DELIMITER
Cursor
Estrutura -
CREATE TRIGGER b e f o r e _ i n s t r u t o r _ u p d a t e
Condicionais BEFORE UPDATE ON i n s t r u t o r
Estrutura -
Repetição FOR EACH ROW
Procedimento BEGIN
(Procedure) INSERT INTO i n s t r u t o r A u d i t
Função SET a c a o = ’ u p d a t e ’ ,
(Function)
i d I n s t r u t o r = OLD . i d ,
Gatilhos s a l a r i o A n t i g o = OLD . s a l a r i o ,
(Trigger)
s a l a r i o A t u a l = NEW. s a l a r i o ,
d a t a M o d i f i c a c a o = NOW( ) ;
END
DELIMITER ;

São João del-Rei

32/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Gatilho Trigger
Modelo
Relacional
adotado

Introdução
Estrutura
Estrutura -
Cursor Testando: Vamos modificar o salario de um instrutor, por exemplo, o de id = 28097.
Estrutura -
Condicionais
Estrutura -
Para validar o teste vamos seguir as seguintes etapas:
Repetição
Procedimento
(Procedure)
1 Lista o salário do instrutor id = 28097;
Função
(Function)
2 Atualizar o salário do instrutor para o valor de 40.000;
Gatilhos 3 Lista novamente o salário do instrutor id = 28097, modificou? (Sim);
(Trigger)
4 Lista os dados da tabela instrutorAudit.

São João del-Rei

33/34
Banco de Dados II

Dr. Celso Luiz de


Souza
Gatilho Trigger
Modelo
Relacional
adotado

Introdução
Estrutura
1 - Lista o salário do instrutor id = 28097
Estrutura -
Cursor select salario from i n s t r u t o r w h e r e i d = 2 8 0 9 7 ;
Estrutura -
Condicionais
Estrutura -
Repetição
2 - Atualizar o salário do instrutor para o valor de 40.000
Procedimento UPDATE i n s t r u t o r SET s a l a r i o = 4 0 0 0 0 . 0 0 WHERE i d = 2 8 0 9 7 ;
(Procedure)

Função
(Function)
3 - Lista novamente o salário do instrutor id = 28097.
Gatilhos select salario from i n s t r u t o r w h e r e i d = 2 8 0 9 7 ;
(Trigger)

4 -Lista os dados da tabela instrutorAudit.


SELECT ∗ FROM i n s t r u t o r A u d i t ;

São João del-Rei

34/34

Você também pode gostar