Buscar

5 - Procedures e Triggers

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 116 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 116 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 116 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Banco de Dados II
Aula 1 - Stored Procedures, 
Functions, Cursores, Triggers e Views.
Reginaldo Gotardo – Uniseb Ciência da Computação – 5o semestre
2
Nós veremos 
1. Stored Procedures, Functions e Cursores
2. Triggers
3. Views
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Aula 2 – Stored Procedures, Functions, 
Cursores, Triggers e Views.
Parte I
Stored Procedures, Functions, 
Cursores
4
Stored Procedures
Nome dado ao recurso que possibilita
armazenar no servidor um conjunto de
instruções que processem determinados
valores e ações com o objetivo de atingir um
resultado
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
5
Stored Procedures
Nome dado ao recurso que possibilita
armazenar no servidor um conjunto de
instruções que processem determinados
valores e ações com o objetivo de atingir um
resultado
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Em outras palavras, são blocos de 
código SQL armazenados no 
servidor, normalmente com o 
objetivo de realizar transações 
completas.
6
Stored Procedures
Benefícios
– Centralização
– Segurança
– Velocidade
– Suporte a transações
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
7
Stored Procedures
Benefícios
– Centralização
– Segurança
– Velocidade
– Suporte a transações
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Em casos em que o banco será 
acessado por diversas aplicações, 
escritas em diversas linguagens, e 
cada sistema terá uma 
responsabilidade diferente.
8
Stored Procedures
Benefícios
– Centralização
– Segurança
– Velocidade
– Suporte a transações
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Em casos em que o banco será 
acessado por diversas aplicações, 
escritas em diversas linguagens, e 
cada sistema terá uma 
responsabilidade diferente.
Os códigos de interação com o banco 
são escritos uma única vez!
Quando for necessário realizar 
manutenção no código escrito, essa 
tarefa será realizada uma única vez, 
diretamente na stored procedure.
9
Stored Procedures
Benefícios
– Centralização
– Segurança
– Velocidade
– Suporte a transações
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
É possível restringir a interação dos 
desenvolvedores com o banco de 
dados por meio de stored 
procedures (pensando de novo em 
diferentes equipes de projeto).
10
Stored Procedures
Benefícios
– Centralização
– Segurança
– Velocidade
– Suporte a transações
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
É possível restringir a interação dos 
desenvolvedores com o banco de 
dados por meio de stored 
procedures (pensando de novo em 
diferentes equipes de projeto).
Toda e qualquer informação requerida ao 
banco de dados deve ser feita por meio de 
stored procedures. Como a gerência desse 
recurso fica a cargo de um único 
responsável qualificado, evita-se a 
execução de códigos mal desenvolvidos ou 
mal intencionados.
11
Stored Procedures
Benefícios
– Centralização
– Segurança
– Velocidade
– Suporte a transações
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Em se tratando de um bloco de códigos em vez de 
uma única expressão SQL, a execução desses blocos 
escritos diretamente no servidor, onde são nativos, 
pode resultar num aumento de performance do que 
se fosse executado em diversas solicitações à parte 
vindas de uma aplicação externa.
12
Stored Procedures
Benefícios
– Centralização
– Segurança
– Velocidade
– Suporte a transações
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Em se tratando de um bloco de códigos em vez de 
uma única expressão SQL, a execução desses blocos 
escritos diretamente no servidor, onde são nativos, 
pode resultar num aumento de performance do que 
se fosse executado em diversas solicitações à parte 
vindas de uma aplicação externa.
Contudo, dependendo do modo como são 
utilizadas, a centralização da execução 
deste comando no servidor pode 
comprometer a performance, ao invés de 
melhorá-la.
13
Stored Procedures
Benefícios
– Centralização
– Segurança
– Velocidade
– Suporte a transações
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Pode-se garantir que toda a 
operação seja executada, ou 
caso algum erro ocorra, que 
nenhuma ação seja salva no 
banco de dados de maneira a 
deixá-lo inconsistente.
14
Stored Procedures – um exemplo (MySQL)
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DELIMITER $$
DROP PROCEDURE IF EXISTS `empresa`.`primeira_SP_teste` $$
CREATE PROCEDURE `empresa`.`primeira_SP_teste` ()
BEGIN
SELECT ('ola');
END $$
DELIMITER ;
15
Stored Procedures – Sintaxe (MySQL)
 Definer determina qual conta de usuário será consultada para
determinar se privilégios apropriados estão disponíveis as
queries definidas pela stored procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE 
[ DEFINER = { user | CURRENT_USER } ]
PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
16
Stored Procedures – Sintaxe (MySQL)
 Parâmetros de Entrada:
– IN: passar informações para um procedimento
– OUT: passar informações de volta para fora do procedimento
– INOUT: passar informações ao procedimento, ter seu valor alterado e
depois passar informações de volta para fora do procedimento.
 Para qualquer parâmetro OUT ou INOUT você precisa prefixar
seus nomes com o símbolo @ quando chamar a stored
procedure de modo que o parâmetro poderá ser chamado de
fora do procedimento.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
17
Stored Procedures – Sintaxe (MySQL)
 Veja o exemplo
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE PROCEDURE get_inventory(IN product CHAR(8), OUT count 
INT)
...corpo do procedimento
Você o chama da seguinte maneira:
CALL get_inventory(“ZCCUUII”, @count);
O parâmetro count pode ser acessado:
SELECT @count;
18
Stored Procedures – Sintaxe (MySQL)
 Declarando e configurando variáveis
– Declarar sempre dentro de um bloco BEGIN / END
– O escopo da variável pertencerá a este bloco
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DECLARE variavel_nome tipo [valor_default];
DECLARE salario DECIMAL(8,2);
DECLARE bonus DECIMAL(4,2);
19
Stored Procedures – Sintaxe (MySQL)
 Configurando variáveis
– Use a instrução SET para modificar o valor de uma variável
– Você pode usar SELECT ... INTO também
– Lembre-se que, se quiser usar o valor dela fora da procedure, esta
precisa ser uma variável OUT ou INOUT
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
SET variavel_nome = valor [ , variavel_nome=valor]
DECLARE i INT;
SET i = 10;
DECLARE a INT
SELECT valor INTO a FROM tabela1 WHERE id=“89009”;
20
Stored Procedures – Sintaxe (MySQL)
 Configurando variáveis
– Use a instrução SET para modificar o valor de uma variável
– Você pode usar SELECT ... INTO também
– Lembre-se que, se quiser usar o valor dela fora da procedure, esta
precisa ser uma variável OUT ou INOUT
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE PROCEDURE teste(OUT a INT)
SELECT 45 INTO a;
CALL teste(@inv);
SELECT @inv;
21
Stored Procedures – Sintaxe (MySQL)
 Executando uma stored procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CALL teste(@inv);
CALL procedure(parametro1, parametro2);
22
Stored Function – Sintaxe (MySQL)
 Criando um exemplo com múltiplas instruções
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DELIMITER $$
DROP FUNCTION IF EXISTS `empresa`.`bonus` $$
CREATE FUNCTION `empresa`.`bonus` (SSN_E INT(8)) RETURNS DECIMAL(10,2)
BEGIN
DECLARE total decimal(10,2);
DECLARE bonus decimal(10,2);SELECT salario INTO total from empregado where SSN=SSN_E;
SET bonus = total*.10;
RETURN bonus;
END $$
DELIMITER ;
23
Stored Procedure – Sintaxe (MySQL)
 Quando criar uma stored procedure com múltiplas instruções
você precisa delimitar um bloco BEGIN / END.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
BEGIN
Código;
Código;
Código;
END
24
Stored Procedure – Sintaxe (MySQL)
Condicionais
– IF-ELSEIF-ELSE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
IF condicao THEN instrucao [ou lista de instruções]
[ELSEIF condicao THEN lista_instrucao]
[ELSE lista instrucao]
END IF
25
Stored Procedure – Sintaxe (MySQL)
Condicionais
– IF-ELSEIF-ELSE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
IF years_employed < 5 THEN
SET bonus = total * 0.05;
ELSEIF years_employed >= 5 and years_employed < 10 THEN
SET bonus = total * .06;
ELSE 
SET bonus = total * 0.8;
END IF
26
Stored Procedure – Sintaxe (MySQL)
Condicionais
– CASE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CASE
WHEN condicao THEN lista_instrucao
[ WHEN condicao THEN lista_instrucao]
[ELSE lista_instrucao]
END CASE
27
Stored Procedure – Sintaxe (MySQL)
Condicionais
– CASE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CASE
WHEN estado=“SP” THEN
SET ipva = .04;
WHEN estado=“PR” THEN
SET ipva= .02;
ELSE
SET ipva=.03;
END CASE
CASE estado
WHEN “SP” THEN
SET ipva = .04;
WHEN “PR” THEN
SET ipva= .02;
ELSE
SET ipva=.03;
END CASE
28
Stored Procedure – Sintaxe (MySQL)
Iterações
– Antes vamos falar de cursores!
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
29
Cursores
Iteração num conjunto de resultados
Permite obter cada linha do conjunto separadamente
e executar múltiplas operações nesta linha, sem
afetar as outras linhas do conjunto
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
30
Cursores
Ciclo de Vida
– Declare o cursor com uma instrução DECLARE
– Abra o cursor com a instrução OPEN
– Faça fetch dos dados a partir do cursor com a instrução
FETCH
– Feche o cursor com a instrução CLOSE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
31
Cursores
Ciclo de Vida
– Declare o cursor com uma instrução DECLARE
– Abra o cursor com a instrução OPEN
– Faça fetch dos dados a partir do cursor com a instrução
FETCH
– Feche o cursor com a instrução CLOSE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DECLARE cursor_nome CURSOR FOR select_statement;
DECLARE calc_bonus CURSOR 
FOR SELECT id, salario, comissao FROM empregados;
32
Cursores
Ciclo de Vida
– Declare o cursor com uma instrução DECLARE
– Abra o cursor com a instrução OPEN
– Faça fetch dos dados a partir do cursor com a instrução
FETCH
– Feche o cursor com a instrução CLOSE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
OPEN cursor_nome;
OPEN calc_bonus;
33
Cursores
Ciclo de Vida
– Declare o cursor com uma instrução DECLARE
– Abra o cursor com a instrução OPEN
– Faça fetch dos dados a partir do cursor com a instrução
FETCH
– Feche o cursor com a instrução CLOSE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
FETCH cursor_nome INTO var1 [ , var2 ... ]
34
Cursores
Ciclo de Vida
– Declare o cursor com uma instrução DECLARE
– Abra o cursor com a instrução OPEN
– Faça fetch dos dados a partir do cursor com a instrução
FETCH
– Feche o cursor com a instrução CLOSE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DELIMITER $$
CREATE PROCEDURE calculate_bonus()
BEGIN
DECLARE emp_id INT;
DECLARE sal DECIMAL(8,2);
DECLARE comm DECIMAL(3,2);
DECLARE done INT;
DECLARE calc_bonus CURSOR FOR SELECT id, salario, comissao FROM empregado;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN calc_bonus;
begin_calc: LOOP
FETCH calc_bonus INTO emp_id, sal, comm;
IF done THEN
LEAVE begin_calc;
END IF;
IF sal > 60000.00 THEN
IF comm > 0.05 THEN
UPDATE empregado SET bonus = sal * comm WHERE id=emp_id;
ELSEIF comm <=0.05 THEN
UPDATE empreagado SET bonus = sal * 0.03 WHERE id=emp_id;
END IF;
ELSE
UPDATE empregado SET bonus = sal * 0.07 WHERE id=emp_id;
END IF;
END LOOP begin_calc;
CLOSE calc_bonus;
END $$
DELIMITER ;
35
Cursores
Ciclo de Vida
– Declare o cursor com uma instrução DECLARE
– Abra o cursor com a instrução OPEN
– Faça fetch dos dados a partir do cursor com a instrução
FETCH
– Feche o cursor com a instrução CLOSE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CLOSE calc_bonus;
36
Cursores – Lidando com Condições
DECLARE pode especificar HANDLERS que podem
executar caso uma situação em particular aconteça
ou condição ocorra.
– Ex. Determinar que um cursor chegou ao final numa
iteração
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DECLARE fim INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fim=1;
IF fim=1 THEN
LEAVE loop;
END IF
37
Cursores – Lidando com Condições
DECLARE pode especificar HANDLERS que podem
executar caso uma situação em particular aconteça
ou condição ocorra.
– Ex. Determinar que um cursor chegou ao final numa
iteração
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DECLARE fim INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fim=1;
IF fim=1 THEN
LEAVE loop;
END IF
O MySQL suporta várias condições em 
relação a reação (handlers) para eventos. 
Para mais detalhes veja páginas 595 e 768 
do manual do MySQL (versão pdf).
38
Stored Procedure – Sintaxe (MySQL)
Iterações (ITERATE)
– LEAVE
– LOOP
– REPEAT
– WHILE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Dependendo do valor de uma variável ou 
resultado de uma tarefa você pode sair 
imediatamente de um loop ou de um 
bloco BEGIN / END usando LEAVE.
LEAVE label;
39
Stored Procedure – Sintaxe (MySQL)
Iterações (ITERATE)
– LEAVE
– LOOP
– REPEAT
– WHILE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
[begin_label] LOOP
statement list
END LOOP [end_label]
Continua a Iteração por um conjunto de 
instruções definidas em seu bloco até que 
LEAVE seja encontrada.
40
Stored Procedure – Sintaxe (MySQL)
Iterações (ITERATE)
– LEAVE
– LOOP
– REPEAT
– WHILE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
[begin_label] LOOP
statement list
END LOOP [end_label]
Continua a Iteração por um conjunto de 
instruções definidas em seu bloco até que 
LEAVE seja encontrada.
DELIMITER $$
CREATE PROCEDURE calculate_bonus()
BEGIN
DECLARE emp_id INT;
DECLARE sal DECIMAL(8,2);
DECLARE comm DECIMAL(3,2);
DECLARE done INT;
DECLARE calc_bonus CURSOR FOR SELECT id, salario, comissao FROM empregado;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN calc_bonus;
begin_calc: LOOP
FETCH calc_bonus INTO emp_id, sal, comm;
IF done THEN
LEAVE begin_calc;
END IF;
IF sal > 60000.00 THEN
IF comm > 0.05 THEN
UPDATE empregado SET bonus = sal * comm WHERE id=emp_id;
ELSEIF comm <=0.05 THEN
UPDATE empreagado SET bonus = sal * 0.03 WHERE id=emp_id;
END IF;
ELSE
UPDATE empregado SET bonus = sal * 0.07 WHERE id=emp_id;
END IF;
END LOOP begin_calc;
CLOSE calc_bonus;
END //
DELIMITER ;
41
Stored Procedure – Sintaxe (MySQL)
Iterações (ITERATE)
– LEAVE
– LOOP
– REPEAT
– WHILE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
[begin_label] REPEAT
statement list
UNTIL condition
END REPEAT [end_label]
Continua a Iteração por um conjunto de 
instruções definidas em seu bloco até que 
LEAVE seja encontrada.
42
Stored Procedure – Sintaxe (MySQL)
Iterações (ITERATE)
– LEAVE
– LOOP
– REPEAT
– WHILE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Continua a Iteração por um conjunto de 
instruções definidas em seu bloco até que 
LEAVEseja encontrada.
DELIMITER //
CREATE PROCEDURE test_data (IN rows INT)
BEGIN
DECLARE val1 FLOAT;
DECLARE val2 FLOAT;
REPEAT
SELECT RAND() INTO val1;
SELECT RAND() INTO val2;
INSERT INTO analise VALUES (NULL, val1, val2);
SET rows = rows – 1;
UNTIL rows = 0
END REPEAT;
END //
DELIMITER ;
43
Stored Procedure – Sintaxe (MySQL)
Iterações (ITERATE)
– LEAVE
– LOOP
– REPEAT
– WHILE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
[begin_label] WHILE condition DO
statement list
END WHILE [end_label]
Continua a Iteração por um conjunto de 
instruções definidas em seu bloco até que 
LEAVE seja encontrada.
44
Stored Procedure – Sintaxe (MySQL)
Iterações (ITERATE)
– LEAVE
– LOOP
– REPEAT
– WHILE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Continua a Iteração por um conjunto de 
instruções definidas em seu bloco até que 
LEAVE seja encontrada.
DELIMITER //
CREATE PROCEDURE test_data (rows INT)
BEGIN
DECLARE val1 FLOAT;
DECLARE val2 FLOAT;
WHILE rows > 0 DO
SELECT RAND() INTO val1;
SELECT RAND() INTO val2;
INSERT INTO analise VALUES (NULL, val1, val2);
SET rows = rows – 1;
END WHILE;
END //
DELIMITER ;
45
Stored Procedure – Sintaxe (MySQL)
Chamando um Rotina dentro de outra
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DELIMITER //
CREATE PROCEDURE process_logs()
BEGIN
SELECT “Processando Logs”;
END //
CREATE PROCEDURE process_users()
BEGIN
SELECT “Processando Usuarios”;
END//
CREATE PROCEDURE maintenance()
BEGIN
CALL process_logs();
CALL process_users();
END//
DELIMITER;
46
Stored Procedure – Sintaxe (MySQL)
Chamando uma Função dentro de uma Rotina
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
# Criamos uma tabela para testarmos a função e o procedimento
CREATE TABLE notas(aluno VARCHAR(20), nota1 INT, nota2 INT, nota3 INT, nota4 INT); 
# Inserimos valores de exemplo
INSERT INTO notas VALUES(‘Juju', 10, 9, 10, 10); 
INSERT INTO notas VALUES(‘Marquinhos', 5, 2, 3, 4); 
47
Stored Procedure – Sintaxe (MySQL)
Chamando uma Função dentro de uma Rotina
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DELIMITER //
CREATE FUNCTION mediaaluno (nome VARCHAR(20)) RETURNS FLOAT
BEGIN
DECLARE n1,n2,n3,n4 INT;
DECLARE med FLOAT;
SELECT nota1,nota2,nota3,nota4 INTO n1,n2,n3,n4 FROM notas WHERE aluno = nome;
SET med = (n1+n2+n3+n4)/4;
RETURN med;
END
//
CREATE PROCEDURE resultadoaluno(IN nome VARCHAR(20))
BEGIN
SELECT mediaaluno(nome);
END //
DELIMITER ;
48
Stored Procedure – Sintaxe (MySQL)
Chamando uma Função dentro de uma Rotina
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
# Chamamos pela linha de comando
mysql > CALL resultadoaluno(‘Juju’);
49
Stored Procedure – Sintaxe (MySQL)
Características de uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE 
[ DEFINER = { user | CURRENT_USER } ]
PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
50
Stored Procedure – Sintaxe (MySQL)
Características de uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE 
[ DEFINER = { user | CURRENT_USER } ]
PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
LANGUAGE SQL
| [ NOT ] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’
51
Stored Procedure – Sintaxe (MySQL)
Características de uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE 
[ DEFINER = { user | CURRENT_USER } ]
PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
LANGUAGE SQL
| [ NOT ] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’
Atualmente, o SQL é a única linguagem 
suportada para Store Procedures, mas 
existem planos para introduzir um 
framework que suporte outras linguagens.
52
Stored Procedure – Sintaxe (MySQL)
Características de uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE 
[ DEFINER = { user | CURRENT_USER } ]
PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
LANGUAGE SQL
| [ NOT ] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’
Usado somente com Stored Functions.
Qualquer função declarada como 
DETERMINISTIC irá retornar sempre o 
mesmo valor desde que o mesmo 
conjunto de parâmetros seja passado (isto 
é útil em cenários de replicação).
53
Stored Procedure – Sintaxe (MySQL)
Características de uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE 
[ DEFINER = { user | CURRENT_USER } ]
PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
LANGUAGE SQL
| [ NOT ] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’
Indica o tipo de tarefa da Stored Procedure:
CONTAINS SQL – especifica que o SQL está presente, mas não vai ler nem 
escrever dados;
NO SQL – indica que nenhum SQL está presente neste procedimento;
READ SQL DATA – indica que o SQL irá somente ler dados;
MODIFIES SQL DATA – indica que o SQL irá modificar dados.
(Até a versão 5.0 estes elementos não influenciavam no resultado da 
procedure)
54
Stored Procedure – Sintaxe (MySQL)
Características de uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE 
[ DEFINER = { user | CURRENT_USER } ]
PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
LANGUAGE SQL
| [ NOT ] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’
Se a característica for configurada como DEFINER
então o procedimento será executado de acordo
com os privilégios do usuário que definiu os
procedimentos. Se for INVOKER, será executado
de acordo com os privilégios do usuário
executando o procedimento.
55
Stored Procedure – Sintaxe (MySQL)
Características de uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE 
[ DEFINER = { user | CURRENT_USER } ]
PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
LANGUAGE SQL
| [ NOT ] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’
Se a característica for configurada como DEFINER
então o procedimento será executado de acordo
com os privilégios do usuário que definiu os
procedimentos. Se for INVOKER, será executado
de acordo com os privilégios do usuário
executando o procedimento.
Executar um procedimento com privilégios de
outros usuário é interessante para garantir a
segurança do sistema. Você pode ter usuários
que não tem absolutamente nenhum direito
sobre o banco de dados além de executar alguns
procedimentos.
56
Stored Procedure – Sintaxe (MySQL)
Características de uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE 
[ DEFINER = { user | CURRENT_USER } ]
PROCEDURE proc_name([parameters, ...])
[characteristics]
[BEGIN]
corpo_da_rotina;
[END]
LANGUAGE SQL
| [ NOT ] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT ‘string’
Adicionar comentários
sobre o procedimento.
57
Stored Procedure – Sintaxe (MySQL)
Apagando uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DROP ( PROCEDURE | FUNCTION ) [ IF EXISTS ] sp_nome;58
Stored Procedure – Sintaxe (MySQL)
Alterando uma Stored Procedure
– Até o momento, apenas alterações de características;
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
ALTER ( PROCEDURE | FUNCTION ) sp_nome [ características ];
59
Stored Procedure – Sintaxe (MySQL)
Status de uma Stored Procedure
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
SHOW ( PROCEDURE | FUNCTION ) STATUS [ LIKE ‘pattern’ ] ;
SHOW PROCEDURE STATUS LIKE ‘testeproc’\G;
60
Stored Procedure – Sintaxe (MySQL)
Sintaxe de uma Stored Procedure criada
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
SHOW CREATE ( PROCEDURE | FUNCTION ) sp_nome;
SHOW CREATE PROCEDURE testeproc\G;
61
Exercício 4.1
1 - Para o BD empresa que vimos em aula, escreva
um stored procedure que atualize o salário dos
funcionários em 10% para aqueles que ganham
menos de 30.000 e em 8% para aqueles que ganham
mais de 30.000.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
62
Exercício 4.2
2 – Para o exemplo de notas de alunos visto, insira
notas para 20 alunos (incluindo o nome destes),
depois crie uma função que calcule a média da
turma. Após isto, faça uma stored procedure que
passe como parâmetro o nome de um aluno e
verifica se este aluno foi aprovado ou reprovado. A
condição para que ele seja aprovado é que sua nota
seja maior ou igual à média da turma (use a função
criada).
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
63
Bibliografia
The MySQL Manual version 5.1
– http://dev.mysql.com/doc/refman/5.1/en/
__ Version 4.1
– http://dev.mysql.com/doc/refman/4.1/pt/index.html
ZIVIANI, R. & NAVATHE, S. B. Sistemas de Banco de
Dados. 4. ed. São Paulo: Pearson Adison-Wesley,
2005.
GILMORE, J. Dominando PHP e MySQL. Rio de
Janeiro: Altabooks, 2008.
MILANI, A. MySQL Guia do Programador. São Paulo:
Novatec, 2006.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Aula 2 – Stored Procedures, Functions, 
Cursores, Triggers e Views.
Parte II
Triggers
65
O que é um Trigger
Uma tarefa executada em resposta a algum evento
pré-determinado
– Inserir, modificar ou apagar dados de tabelas
– Pode ocorrer antes ou imediatamente após um evento
como esse
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
66
O que é um Trigger
Gatilho ou trigger é um recurso de programação
executado sempre que o evento associado ocorrer.
É muito utilizada para ajudar a manter a consistência
dos dados ou para propagar alterações em um
determinado dado de uma tabela para outras.
Um bom exemplo é um gatilho criado para controle
de quem alterou a tabela, nesse caso, quando a
alteração for efetuada, o gatilho é "disparado" e
grava em uma tabela de histórico de alteração, o
usuário e data/hora da alteração.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
67
O que é um Trigger
Outro exemplo é usar gatilhos para garantir que
regras de negócio sejam automatizadas e cumpridas.
– Garantir que uma tentativa de inserir informações sobre
um produto na tabela product inclua o identificador de um
fabricante cujas informações já estão na tabela
manufacturer
– Validação de dados antes de inserir
Garantia de integridade referencial
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
68
Ação antes de um evento
Um distribuidor de alimentos gourmet exige que
pelo menos $10 de café seja comprado antes que a
transação seja processada. Se um usuário tentar
adicionar menos que essa quantidade no carrinho de
compras esse valor valor deve ser automaticamente
arredondado para $10.
– Um trigger antes, o qual avalia qualquer tentativa de
inserir um produto no carrinho de compras e aumenta o
valor de qualquer compra inaceitavelmente baixa para
$10.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
69
Ação antes de um evento
Um trigger antes, o qual avalia qualquer tentativa de
inserir um produto no carrinho de compras e
aumenta o valor de qualquer compra
inaceitavelmente baixa para $10.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Shopping cart insertion request submitted:
If product identifier set to “coffee”:
If dollar amoun < $10:
Set dollar amount = $10;
End If
End If
Process insertion request
70
Sintaxe Trigger – MySQL
A cláusula DEFINER determina qual conta de usuário
será consultada para determinar os privilégios
adequados disponíveis para as queries dentro do
trigger.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE
[ DEFINER = { USER | CURRENT_USER } ]
TRIGGER <nome>
{ BEFORE | AFTER }
{INSERT | UPDATE | DELETE }
ON <table name>
FOR EACH ROW
<codigo SQL da Trigger>
71
Sintaxe Trigger – MySQL
Definir dados de antes (OLD) e depois (NEW)
– temos dois operadores importantíssimos que nos
possibilitam acessar as colunas da tabela alvo do comando
DML, ou seja, podemos acessar os valores que serão
enviados para a tabela alvo antes (BEFORE) ou depois
(AFTER) de um UPDATE, por exemplo.
– Tais operadores nos permitirão então, ter dois momentos,
o antes e o depois e também examinar os valores para que
sejam ou não inseridos, atualizados ou excluídos da tabela.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
72
Sintaxe Trigger – MySQL
Antes mesmo de analisarmos os operadores, temos
que analisar as seguintes diretrizes:
– INSERT: o operador NEW.nome_coluna, nos permite
verificar o valor enviado para ser inserido em uma coluna
de uma tabela. OLD.nome_coluna não está disponível.
– DELETE: o operador OLD.nome_coluna nos permite
verificar o valor excluído ou a ser excluído.
NEW.nome_coluna não está disponível.
– UPDATE: tanto OLD.nome_coluna quanto
NEW.nome_coluna estão disponíveis, antes (BEFORE) ou
depois (AFTER) da atualização de uma linha.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
73
Sintaxe Trigger – MySQL
Percebemos então que, ao inserir uma nova linha em
uma tabela, temos os valores das colunas disponível
através do operador NEW.nome_coluna, quando
excluímos uma linha, temos ainda os valores das
colunas da linha excluída através do operador
OLD.nome_coluna e temos os dois operadores
disponíveis no UPDATE pois consiste em um DELETE
seguido por um INSERT.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
74
Sintaxe Trigger – MySQL
Exemplo
– Vamos criar uma tabela tbl_cliente
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE TABLE tbl_cliente (
cliente_id int unsigned auto_increment primary key,
cliente_nome char(80) not null,
cliente_email char(80) not null,
dt_cadastro timestamp default current_timestamp
) Engine = INNODB;
75
Sintaxe Trigger – MySQL
Exemplo
– Vamos criar um trigger bem simples que validará o
tamanho do nome.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
delimiter //
CREATE TRIGGER trg_1 BEFORE INSERT ON tbl_cliente
FOR EACH ROW
BEGIN
DECLARE nome VARCHAR(80);
SET nome = NEW.cliente_nome;
IF (( CHAR_LENGTH(nome) <= 4) OR (nome = ‘’) )
THEN SET NEW.cliente_nome = NULL;
END IF;
END //
delimiter ;
76
Sintaxe Trigger – MySQL
Exemplo
– Ao tentarmos inserir um valor cujo número de caracteres é
menor ou igual a 0 ou nada, o TRIGGER será disparado e
setará o valor enviado para NULL através do operador
NEW.nome_coluna.
– Como na tabela de exemplo a coluna cliente_nome foi
configurada com a restrição NOT NULL, ou seja, não
aceitará valores nulos, uma mensagem de erro será
enviada e o INSERT falhará.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
INSERT INTO tbl_cliente SET cliente_nome = ‘test’, cliente_email = 
‘teste@teste.com’;
77
Sintaxe Trigger – MySQL
Podemos criar uma restrição de integridade
referencial com TRIGGERS.
– Por exemplo, usaremos tabelas MyISAM (que não dão
suporte a criaçãode relacionamento com chaves
estrangeiras) e, aproveitando nosso exemplo, como
clientes compram produtos, podemos criar uma tabela de
produtos e restringir que somente os produtos
cadastrados podem ser comprados, inseridos na tabela de
compra que somente clientes cadastrados podem efetuar
compras. Criamos então a tabela de produtos e compras.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
78
Sintaxe Trigger – MySQL
Podemos criar uma restrição de integridade
referencial com TRIGGERS.
– Por exemplo, usaremos tabelas MyISAM (que não dão
suporte a criação de relacionamento com chaves
estrangeiras) e, aproveitando nosso exemplo, como
clientes compram produtos, podemos criar uma tabela de
produtos e restringir que somente os produtos
cadastrados podem ser comprados, inseridos na tabela de
compra que somente clientes cadastrados podem efetuar
compras. Criamos então a tabela de produtos e compras.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
79
Sintaxe Trigger – MySQL
Podemos criar uma restrição de integridade
referencial com TRIGGERS.
– Por exemplo, usaremos tabelas MyISAM (que não dão
suporte a criação de relacionamento com chaves
estrangeiras) e, aproveitando nosso exemplo, como
clientes compram produtos, podemos criar uma tabela de
produtos e restringir que somente os produtos
cadastrados podem ser comprados, inseridos na tabela de
compra que somente clientes cadastrados podem efetuar
compras. Criamos então a tabela de produtos e compras.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE TABLE tbl_cliente (
cliente_id int unsigned auto_increment primary key,
cliente_nome char(80) not null,
cliente_email char(80) not null,
dt_cadastro timestamp default current_timestamp
) Engine = MyISAM;
80
Sintaxe Trigger – MySQL
Podemos criar uma restrição de integridade
referencial com TRIGGERS.
– Por exemplo, usaremos tabelas MyISAM (que não dão
suporte a criação de relacionamento com chaves
estrangeiras) e, aproveitando nosso exemplo, como
clientes compram produtos, podemos criar uma tabela de
produtos e restringir que somente os produtos
cadastrados podem ser comprados, inseridos na tabela de
compra que somente clientes cadastrados podem efetuar
compras. Criamos então a tabela de produtos e compras.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE TABLE tbl_compra (
dt_cadastro timestamp default current_timestamp,
cliente_id int unsigned not null,
produto_id int unsigned not null
) Engine = MyISAM;
81
Sintaxe Trigger – MySQL
Podemos criar uma restrição de integridade
referencial com TRIGGERS.
– Por exemplo, usaremos tabelas MyISAM (que não dão
suporte a criação de relacionamento com chaves
estrangeiras) e, aproveitando nosso exemplo, como
clientes compram produtos, podemos criar uma tabela de
produtos e restringir que somente os produtos
cadastrados podem ser comprados, inseridos na tabela de
compra que somente clientes cadastrados podem efetuar
compras. Criamos então a tabela de produtos e compras.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE TABLE tbl_produto (
produto_id int unsigned auto_increment primary key,
produto_nome CHAR(80) not null
) Engine = MyISAM;
82
Sintaxe Trigger – MySQL
Podemos criar uma restrição de integridade
referencial com TRIGGERS.
– Por exemplo, usaremos tabelas MyISAM (que não dão
suporte a criação de relacionamento com chaves
estrangeiras) e, aproveitando nosso exemplo, como
clientes compram produtos, podemos criar uma tabela de
produtos e restringir que somente os produtos
cadastrados podem ser comprados, inseridos na tabela de
compra que somente clientes cadastrados podem efetuar
compras. Criamos então a tabela de produtos e compras.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
DELIMITER //
CREATE TRIGGER trg_2 BEFORE INSERT ON tbl_compra
FOR EACH ROW
BEGIN
#verifica se id de cliente existe
SELECT COUNT(cliente_id) INTO @cliente_id FROM tbl_cliente
WHERE cliente_id = NEW.cliente_id;
#verifica se id de produto existe
SELECT COUNT(produto_id) INTO @produto_id FROM tbl_produto
WHERE produto_id = NEW.produto_id;
IF ((@cliente_id = 0) OR (@produto_id = 0)) THEN
#força o erro
SET NEW.cliente_id=NULL;
SET NEW.produto_id=NULL
END IF;
END//
DELIMITER ;
83
Excluindo um Trigger
DROP TRIGGER <nome>;
Não há suporte a alteração!
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
84
Limitações
 Não se pode chamar diretamente um TRIGGER com
CALL, como se faz com um Stored Procedures;
 Não é permitido iniciar ou finalizar transações em
meio à TRIGGERS;
 Não se pode criar um TRIGGERS para uma tabela
temporária - TEMPORARY TABLE;
 TRIGGERS ainda não podem ser implementadas com
a intenção de devolver para o usuário ou para uma
aplicação mensagens de erros.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
85
Exercício 4.3
Para a tabela empregado crie Trigger(s) que faça(m) o
log da tabela:
– Registre se houve inserção, atualização ou exclusão na
tabela.
– Use uma nova tabela para guardar estas informações
– Tabela LOG
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
ID TIPO TIME USUÁRIO
1 INSERCAO 05/12/2012 – 13:08:08 ROOT
2 DELECAO 06/12/2012 – 14:00:01 ROOT
86
Exercício 4.4
Crie uma tabela que receba cadastro de clientes com
nome, endereço, telefone e email.
– Crie uma tabela que contenha as preferências da pessoa
em relação a produtos
Toda vez que um cliente for cadastrado deverá ser
disparado um gatilho que insere o email do cliente
numa newsletter, o endereço numa mala direta e o
telefone numa tabela de ordem de serviço para
ligações da área de marketing (oferta de produtos).
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
87
Bibliografia
The MySQL Manual version 5.1
– http://dev.mysql.com/doc/refman/5.1/en/
__ Version 4.1
– http://dev.mysql.com/doc/refman/4.1/pt/index.html
ZIVIANI, R. & NAVATHE, S. B. Sistemas de Banco de
Dados. 4. ed. São Paulo: Pearson Adison-Wesley,
2005.
GILMORE, J. Dominando PHP e MySQL. Rio de
Janeiro: Altabooks, 2008.
MILANI, A. MySQL Guia do Programador. São Paulo:
Novatec, 2006.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
Aula 2 – Stored Procedures, Functions, 
Cursores, Triggers e Views.
Parte III
Views
89
O que é uma View?
Uma View é um objeto que pertence a um banco de
dados, definida baseada em declarações SELECT´s,
retornando uma determinada visualização de dados
de uma ou mais tabelas.
Esses objetos são chamados por vezes de "virtual
tables", formada a partir de outras tabelas que por
sua vez são chamadas de "based tables" ou ainda
outras Views.
E alguns casos, as Views são atualizáveis e podem ser
alvos de declaração INSERT, UPDATE e DELETE, que
na verdade modificam sua "based tables".
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
90
Vantagens
 Uma View pode ser utilizada, por exemplo, para retornar um
valor baseado em um identificador de registro;
 Pode ser utilizada para promover restrições em dados para
aumentar a segurança dos mesmos e definir políticas de
acesso em nível de tabela e coluna.
– Podem ser configurados para mostrar colunas diferentes para
diferentes usuários do banco de dados;
 Pode ser utilizada com um conjunto de tabelas que podem ser
unidas a outros conjuntos de tabelas com a utilização de
JOIN´s ou UNION.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
91
Vantagens
Para definir Views em um banco de dados,
utilize a declaração CREATE VIEW, a qual tem a
seguinte sintaxe:
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE [OR REPLACE] 
[ALGORITHM = algorithm_type] VIEW
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
92
Vantagens
Para definir Views em um banco de dados,
utilizea declaração CREATE VIEW, a qual tem a
seguinte sintaxe:
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE [OR REPLACE] 
[ALGORITHM = algorithm_type] VIEW
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
OR REPLACE: pode ser utilizada para substituir
uma View de mesmo nome existente no banco
de dados ao qual ela pertence. Pode-se utilizar
ALTER TABLE para o mesmo efeito;
93
Vantagens
Para definir Views em um banco de dados,
utilize a declaração CREATE VIEW, a qual tem a
seguinte sintaxe:
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE [OR REPLACE] 
[ALGORITHM = algorithm_type] VIEW
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
ALGORITHM: essa cláusula define qual algoritmo
interno utilizar para processar a View quando a
mesma for invocada. Estes podem ser
UNDEFINED (cláusula em branco), MERGE ou
TEMPTABLE.
94
Vantagens
Para definir Views em um banco de dados,
utilize a declaração CREATE VIEW, a qual tem a
seguinte sintaxe:
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE [OR REPLACE] 
[ALGORITHM = algorithm_type] VIEW
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
É o nome que damos ao objeto View que
criarmos. Esse nome poderá ser não qualificado,
quando criado no banco de dados corrente ou
totalmente qualificado quando criarmos em um
banco de dados que não está definido no
contexto atual (db_name.view_name).
95
Vantagens
Para definir Views em um banco de dados,
utilize a declaração CREATE VIEW, a qual tem a
seguinte sintaxe:
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE [OR REPLACE] 
[ALGORITHM = algorithm_type] VIEW
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
column_list: recurso para que possamos
sobrescrever os nomes das colunas que serão
recuperadas pela declaração SELECT;
96
Vantagens
Para definir Views em um banco de dados,
utilize a declaração CREATE VIEW, a qual tem a
seguinte sintaxe:
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE [OR REPLACE] 
[ALGORITHM = algorithm_type] VIEW
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
select_statement: é a sua declaração SELECT e indica a
forma na qual você deseja que os dados sejam retornados.
Tal declaração deverá indicar a forma a qual você deseja
retornar os dados, podendo ser utilizado funções, JOIN´s e
UNION. Podem ser utilizadas quaisquer tabelas ou views
contidas no servidor de bancos de dados MySQL,
observando a questão de nomes totalmente qualificados
ou não.
97
Vantagens
Para definir Views em um banco de dados,
utilize a declaração CREATE VIEW, a qual tem a
seguinte sintaxe:
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
CREATE [OR REPLACE] 
[ALGORITHM = algorithm_type] VIEW
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
WITH CHECK OPTION: todas as declarações que
tentarem modificar dados de uma view definida
com essa cláusula serão revisadas para checar se
as modificações respeitarão a condição WHERE,
definida no SELECT da View.
98
Definindo Views
Para iniciarmos com a mão na massa,
definiremos uma View simples para listar
cidades da tabela City, do banco de dados
World.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
99
Definindo Views
A partir desse momento, se dermos um SHOW
TABLES no banco de dados World, veremos
que uma tabela adicional foi criada, que é a
View que criamos.
Para uma conceituação mais ampla, uma View
é um mapeamento lógico de várias tabelas
contidas em um ou mais bancos de dados que
por sua vez estão em um servidor MySQL.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
100
Definindo Views
No caso da View criada, temos uma tabela
virtual (vw_viewCity) baseada em uma tabela
chamada de base (City).
Um bom exemplo para utilizarmos a tal lista
de colunas é criar a mesma View, mas agora
sobrescrevendo o nome da coluna "Name"
para "Cidade“.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
101
Definindo Views
No caso da View criada, temos uma tabela
virtual (vw_viewCity) baseada em uma tabela
chamada de base (City).
Um bom exemplo para utilizarmos a tal lista
de colunas é criar a mesma View, mas agora
sobrescrevendo o nome da coluna "Name"
para "Cidade“.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
102
Definindo Views
Faltou o OR REPLACE
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
103
Definindo Views
Podemos criar Views mais sofisticadas,
com um comando SELECT mais
trabalhado, podendo utilizar das
cláusulas WHERE, GROUP BY, HAVING e
ORDER BY.
Alguns SGBD´s comerciais não permitem
a utilização de ORDER BY em meio do
SELECT na definição de uma View, a
exemplo do SQL Server, da Microsoft.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
104
Definindo Views
Uma consulta mais trabalhada para a criação de uma
View, envolvendo as tabelas Country e
CountryLanguage do banco de dados World.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
105
Atualizando Views
Views podem ser constituídas facilmente, como
vimos anteriormente.
Mas para termos Views que podem receber
declarações de atualização tais como UPDATE e
DELETE, que de fato alteram as tabelas base ("based
tables"), temos que ter alguns cuidados na criação
do objeto de visualização.
Uma View criada com funções agregadas, por
exemplo, não poderá receber atualizações, pois os
dados logicamente estão agregados ou agrupados e
não teremos correspondências diretas para uma
exclusão ou atualização.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
106
Atualizando Views
Análise a seguinte situação: "crie uma View no
banco de dados World para contar quantas
línguas se falam em cada país que aparece
nas tabelas Country e CountryLanguage".
– Sendo esta a tarefa, teremos 1 registro apenas
para cada país da tabela Country, contando
quantas línguas aparecem na tabela para este
único país na tabela CountryLanguage. Isso não
nos possibilita atualizar uma determinada linha,
pois, o que retornou dessa consulta foi um
conjunto agrupado por país.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
107
Atualizando Views
Quando temos uma View com um SELECT
simples, sem agrupamento, podemos atualizá-
la, esta que na verdade, somente receberá a
declaração e quem serão atualizadas serão as
tabelas base que tem seus dados mapeados
para esta View. Para que você não estrague
seu banco de dados World, criaremos uma
tabela chamada "CountryPop", com seguinte
sintaxe:
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
108
Atualizando Views
Quando temos uma View com um SELECT simples,
sem agrupamento, podemos atualizá-la, esta que na
verdade, somente receberá a declaração e quem
serão atualizadas serão as tabelas base que tem seus
dados mapeados para esta View. Para que você não
estrague seu banco de dados World, criaremos uma
tabela chamada "CountryPop", com seguinte sintaxe:
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
109
Atualizando Views
Com a tabela base criada, vamos então definir
a View para que possamos atualizar a mesma.
Faremos um SELECT na View para exibir a
linha que atualizaremos e na seqüência
emitimos um UPDATE para que a mesma seja
atualizada.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
110
Atualizando Views
 Com a tabela
base criada,
vamos então
definir a View
para que
possamos
atualizar a
mesma.
 Faremos um
SELECT na View
para exibir a
linha que
atualizaremos e
na seqüência
emitimos um
UPDATE paraque a mesma
seja atualizada.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
111
Views com WITH CHECK OPTION 
Podemos ainda trabalhar algumas restrições na
criação de algumas Views, como utilizar a opção
WITH CHECK OPTION.
Atribuindo esta opção na criação de uma View
significa que atualização que são emitidas terão que
se encaixar às condições definidas na cláusula
WHERE da consulta SELECT.
Peguemos um exemplo de uma View que nos
retorne todos os países da tabela CountryPop que
acabamos de criar, que tenha populações maior ou
igual a 100000000.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
112
Views com WITH CHECK OPTION 
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
113
Views com WITH CHECK OPTION 
 Definimos na cláusula WHERE da View que somente poderia
ser atualizado o número da população do país se este
comando de atualização enviasse um número maior ou igual
a 100000000. Enviamos um UPDATE para atualizar a
população da Nigéria para 9999999, que é ligeiramente
menor que o número definido no WHERE da View.
 WITH CHECK OPTION somente será aceita em meio a uma
View atualizável, caso aquela que você vier a definir não seja
atualizável, um erro será enviado e a mesma não será criada.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
114
Apagando uma View
DROP VIEW
– Para excluir uma View, basta utilizar o comando
DROP VIEW view_name
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
115
Exercício 4.5
Crie uma view que contenha todos os estados do
Brasil, além das informações como população de
cada estado, capital, etc.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.
116
Bibliografia
The MySQL Manual version 5.1
– http://dev.mysql.com/doc/refman/5.1/en/
__ Version 4.1
– http://dev.mysql.com/doc/refman/4.1/pt/index.html
ZIVIANI, R. & NAVATHE, S. B. Sistemas de Banco de
Dados. 4. ed. São Paulo: Pearson Adison-Wesley,
2005.
GILMORE, J. Dominando PHP e MySQL. Rio de
Janeiro: Altabooks, 2008.
MILANI, A. MySQL Guia do Programador. São Paulo:
Novatec, 2006.
Banco de Dados Stored Procedures, Functions, Cursores, Triggers e Views.

Continue navegando

Outros materiais