Buscar

Sistema de Gerenciamento de BD - Aula 03

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 9 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 9 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 9 páginas

Prévia do material em texto

Prof. Martin MorãesProf. Martin Morães
AulaAula33
Sistema Gerenciador 
de Banco de Dados1
10
Conversa Inicial
Programas Armazenados
� Procedures, 
triggers e funções
� Programações 
dentro do DB
� Como criar e 
como utilizar
Contextualizando
Programas Armazenados
� Automatizar 
rotinas:
• log
• atualização de 
estoque
• validações
• etc.
Pesquisa
Programas 
Armazenados
Programas Armazenados
� Cada SGDB 
implementa a sua 
própria 
linguagem de 
programação
� Comumente 
denominada de 
PL, acrônimo 
para Procedural 
Language
� As procedures
� As functions
� As triggers
Delimitadores
Programas Armazenados –
Delimitadores
� Toda instrução SQL 
tem que terminar 
com um caractere 
delimitador
� Os programas 
armazenados são 
instruções SQL do 
tipo CREATE 
� Precisam ser 
encerrados com 
um delimitador
seq Código
1 Delimitador *
2
Cria procedure totaliza()
INÍCIO
Instrução SQL 1;
Instrução SQL 2;
Instrução SQL 3;
FIM*
3 Delimitador;
Variáveis
Variáveis
� A sintaxe é:
DECLARE var_name [, var_name] 
... type [DEFAULT value]
• Exemplo:
DECLARE vlr, vlrUm int;
DECLARE vlrDois int
DEFAULT 5;
� Default NULL
• Atribuição
� SET vlr = 10;
� SELECT MIN(id), 
MAX(id) 
INTO num1, num2 
FROM alunos;
Controle de Fluxo
Controle de Fluxo
� If
� Case
� While
� Repeat
Controle de Fluxo – If
� Sintaxe:
IF search_condition THEN 
statement_list
[ELSEIF 
search_condition THEN 
statement_list] ...
[ELSE statement_list]
END IF
• Exemplo:
IF num1 = 1 THEN
SELECT "UM";
ELSEIF num1 > 1 THEN
SELECT “MAIOR”;
END IF;
Controle de Fluxo – Case
� Sintaxe:
CASE case_value
WHEN when_value
THEN statement_list
[WHEN when_value
THEN statement_list] ...
[ELSE statement_list]
END CASE
• Exemplo:
CASE num1
WHEN 0 THEN 
SELECT “ZERO”;
WHEN 1 THEN
SELECT “UM”;
WHEN 2 THEN 
SELECT “DOIS”;
END CASE;
Controle de Fluxo – While
� Sintaxe:
WHILE search_condition DO
statement_list
END WHILE
• Exemplo:
WHILE num2 > 10 DO
SET num2 = 
num2 – 100;
END WHILE;
Controle de Fluxo – Repeat
� Sintaxe:
REPEAT
statement_list
UNTIL search_condition
END REPEAT
• Exemplo:
REPEAT
SET num2 = 
num2 – 10;
UNTIL num2 < 10
END REPEAT;
Procedimentos –
Procedures
Procedure
� Sintaxe:
CREATE PROCEDURE sp_name 
([proc_parameter[,...]])
routine_body
• Exemplo:
CREATE PROCEDURE lista_prof_aluno()
BEGIN
SELECT p.nome, a.nome
from aula
left join alunos a 
on aula.idaluno = a.id
left join professores p 
on aula.idprofessor = p.id;
END
� Executar a procedure
• Sintaxe:
CALL sp_name 
([parameter[,...]])
CALL sp_name[()]
� Exemplo:
CALL lista_prof_aluno();
CALL lista_prof_aluno;
� Especificando parâmetros
• IN
• OUT
• INOUT
Procedure – IN
� Exemplo:
CREATE PROCEDURE `lista_prof_aluno`(in idProf
int)
BEGIN
SELECT p.nome, a.nome
from aula
left join alunos a on 
aula.idaluno = a.id
left join professores p on 
aula.idprofessor = p.id
where
aula.idprofessor = idProf;
END
� Exemplo:
call lista_prof_aluno(101);
Procedure – OUT
� Variáveis de ambiente
SET @NUM = 10, @nome = 
“MARTIN”;
SELECT @NUM, @nome;
CREATE PROCEDURE 
`lista_prof_aluno_TOTAL`(in idProf int, out 
total int)
BEGIN
SELECT count(*) into total 
from aula
left join alunos a on 
aula.idaluno = a.id
left join professores p on 
aula.idprofessor = p.id
where
aula.idprofessor = idProf;
END
� set @total_registros = 0;
� call lista_prof_aluno_TOTAL
(101, @total_registros);
� select @total_registros;
Procedure – INOUT
CREATE PROCEDURE 
`lista_prof_aluno_TOTAL`(inout total int)
BEGIN
SELECT count(*) into total 
from aula
left join alunos a on 
aula.idaluno = a.id
left join professores p on 
aula.idprofessor = p.id
where
aula.idprofessor = total;
END
� set @total_registros = 101;
� call lista_prof_aluno_TOTAL
(@total_registros);
� select @total_registros;
Gatilhos – Triggers
Triggers
� Na criação define-se:
• um nome 
• ocasião
� “BEFORE” ou 
“AFTER”
• eventos
� “insert”
� “update”
� “delete”
• tabela
• ordem
� Sintaxe:
CREATE TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name
FOR EACH ROW
[trigger_order]
trigger_body
• Exemplo:
DELIMITER //
CREATE TRIGGER contador
AFTER INSERT
ON professores 
FOR EACH ROW
BEGIN
SET @Total = @Total+1;
END//
DELIMITER;
� Os operadores
• “OLD”
• “NEW”
CREATE TRIGGER contador
AFTER INSERT ON professores
FOR EACH ROW
BEGIN
SET @Total = 
@Total+1;
SET @NOMES = 
CONCAT_WS(';', 
@NOMES, 
NEW.nome);
END
SET @NOMES = "A";
INSERT INTO 
professores(nome) 
VALUES("Aurélio")
,("David"),("João“
);
SELECT @NOMES;
# @NOMES
'A;Aurélio;David;João'
� INSERT só tem 
(NEW), não tem 
(OLD)
� DELETE só tem 
(OLD), não tem 
(NEW)
� UPDATE tem 
(NEW) e (OLD)
Síntese
Programas Armazenados
� Procedures, 
triggers e funções
� Programações 
dentro do DB
� Como criar e 
como utilizar
� Automatizar rotinas:
• log
• atualização de 
estoque
• validações
• etc.

Outros materiais