Você está na página 1de 5

Engenharia da Computao

BD - Aula de Stored Procedure


Profa Claudete Moscardini
Tpicos: Stored Procedure, Triggers e Views
Stored Procedure: programas armazenados no servidor, pr-compilados, chamados de
forma explcita para executar alguma lgica de manipulao de dados, podendo retornar
ou no algum valor.
No MySQL, os procedimentos armazenados esto disponveis exatamente desde a
verso 5.0, que foi um marco na evoluo do SGBD OpenSource mais utilizado no
mundo.
Os procedimentos armazenados, quando criados e compilados, so inseridos em uma
tabela chamada ROUTINES no banco de dados INFORMATION_SCHEMA, que o
dicionrio de dados do MySQL. Para listarmos todos os stored routines (Stored
Procedure e Functions), basta emitirmos o seguinte comando no mysql client:
mysql> SELECT * FROM INFORMATION_SCHEMA.ROUTINES;
Triggers tambm so um tipo de procedimento armazenado, mas esto separadas em
outra tabela do dicionrio, chamada TRIGGERS.
mysql> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS;
SINTAXE da Stored Procedure:
CREATE PROCEDURE nome_procedure (tipo_param param_1 data_type, ...)
[BEGIN]
corpo_da_rotina;
[END]
tipo_param: existem 3 tipos de parmetros em uma Stored Procedure no MySQL:
1. IN => este um parmetro de entrada, ou seja, um parmetro cujo seu valor ser
utilizado no interior do procedimento para produzir algum resultado;
2. OUT => est parmetro retorna algo de dentro do procedimento para o lado
externo, colocando os valores manipulados disponveis na memria ou no
conjunto de resultados;
3. INOUT => faz os dois trabalhos ao mesmo tempo!
data_type: tipo de dados permitido para este parmetro (INT, DECIMAL, CHAR [...]);
corpo_da_rotina: onde so definidos os comandos SQL que faro alguma manipulao
e/ou defendero alguma lgica, podendo retornar ou no algum resultado.
DELIMITER $$
CREATE PROCEDURE sp_contaempregado(OUT param1 INT)

Engenharia da Computao
BEGIN
select count(*) INTO param1 from empregado;
END $$
DELIMITER ;

Chamada de procedure: CALL


CALL sp_contaempregado( @a);
select @a;
As stored procedures permitem que processos (condicionais, repeties , funes e etc)
antes feitos dentro do cdigo fonte do programa sejam agora todos incorporados dentro
dos seus procedimentos armazenados no banco de dados, possibilitando assim cdigos
fontes de programas cada vez menores e mais leves no lado do cliente, mas em
compensao do outro lado o servidor ser mais exigido em termos de processamento
do SGBD .
Estrutura IF|ELSE
Sintaxe:
IF <condio> THEN
<comandos sql caso verdadeiro>
ELSE
<comandos sql caso falso>
END IF
Exemplo:
1)
delimiter $$
create procedure sp_dependenteSexo(in opcao integer)
begin
if opcao = 0 then
select * from dependente where sexo = 'F';
else
if opcao = 1 then
select * from dependente where sexo = 'M';
end if;
end if;
end $$
delimiter ;
CALL sp_dependenteSexo(1);
2) Enviando Mensagem
delimiter $$
create procedure sp_mensagem(in opcao integer)
begin

Engenharia da Computao
if opcao = 0 then
select A vida bela;
end if;
end $$
delimiter;
CALL sp_mensagem(0);
TRIGGERS
So gatilhos programados para acontecer em determinada condio para uma
determinada tabela do banco. Os eventos responsveis em executar uma trigger so os
comandos de atualizao insert, update e delete.
Exemplo de trigger:
DELIMITER $$
CREATE TRIGGER verificaSalario before UPDATE ON empregado FOR EACH row
begin
IF NEW.salario > OLD.salario*1.05 THEN
SET NEW.salario = OLD.salario*1.05;
end IF;
END $$
DELIMITER ;
A trigger acima verifica antes de fazer uma alterao ( BEFORE UPDATE ON) se o
salrio novo est recebendo um percentual de aumento acima de 5% caso isso esteja
acontecendo ele seta o novo (NEW) salrio para receber apenas 5%.
Exerccios
1) Faa uma trigger para a tabela empregado. Antes de incluir um empregado
verifique se o salario est nulo, caso seja verdade atribua o valor do salrio
mnimo para esta coluna.
CREATE TRIGGER salariojust BEFORE INSERT ON empregado
FOR EACH ROW BEGIN
IF NEW.SALARIO IS NULL THEN
NEW.SALARIO = 880;
END IF;
END;
2) Faa uma procedure que retorno o total dos salrios pagos aos empregados.

Engenharia da Computao
Aula 06/09/2016
Exerccios Stored Procedure
1) Complete o exemplo abaixo de uma calculadora.
CREATE PROCEDURE Calculadora(IN num1 INT,IN num2 INT,IN oper
INT, OUT res int)
BEGIN
IF oper = 1 then
set res = (num1+num2);
END IF;
END $$
DELIMITER ;
//Executando a sua calculadora
CALL calculadora(12,36,1,@a);
select @a;
2) Faa uma stored procedure para calcular o fatorial de um nmero.
3) Verifique a utilizao do Comando REPEAT
DROP PROCEDURE IF EXISTS mysql_test_repeat_loop$$
CREATE PROCEDURE mysql_test_repeat_loop()
BEGIN
DECLARE x INT;
DECLARE str VARCHAR(255);
SET x = 1;
SET str = '';
REPEAT
SET str = CONCAT(str,x,',');
SET x = x + 1;
UNTIL x > 5
END REPEAT;
SELECT str;
END$$
DELIMITER ;
CALL mysql_test_repeat_loop( )
4) Utilize a ideia do REPEAT da stored procedure acima, imprima os 20 primeiros
nmeros da srie de Fibonacci, separados por espao 1 1 2 3 5 8 13.........

Engenharia da Computao
Bibliografia
http://www.devmedia.com.br/stored-procedures-no-mysql/29030
http://www.mysqltutorial.org/stored-procedures-loop.aspx