Projeto de Banco de Dados Stored Procedures e Funções

Propaganda
Projeto de Banco de Dados
Prof. Marcelo Siedler
Objetivos do documento:
•
Apresentar os conceitos de stored procedutes e funções.
•
Exercícios.
Referência: http://dev.mysql.com/doc/refman/4.1/pt/stored-procedures.html
Stored Procedures e Funções
Stored procedures e funções são recursos novos no MySQL versão 5.0. Uma stored procedure é um
conjunto de comandos SQL que podem ser armazenados no servidor. Uma vez que isto tenha sido feito,
os clientes não precisam reenviar os comandos, mas podem fazer referência às stored procedures.
Stored procedures podem fornecer um aumento no desempenho já que um conjunto menor de
informação precisa ser enviada entre o servidor e o cliente. O lado negativo é que isto aumenta a carga
no sistema do servidor de banco de dados, já que a maior parte do trabalho é feita no servidor e menor
parte é feita do lado do cliente (aplicação) e geralmente existem muitas máquinas e poucos servidores
de banco de dados.
Stored procedures também permitem que você tenha bibliotecas de funções no servidor de banco de
dados. No entanto, linguagens de aplicações modernas já permitem que isto seja feito internamente
com classes, por exemplo, e usar estes recursos das linguagens de aplicações clientes é benéfico para o
programador mesmo fora do escopo do banco de dados usado.
Situações onde stored procedures fazem sentido:
•
•
Quando várias aplicações clientes são escritas em diferentes linguagens ou funcionam em
diferentes plataformas, mas precisam realizar as mesmas operações de banco de dados.
Quando a segurança é prioritária. Bancos, por exemplo, usam stored procedures para todas as
operações comuns. Isto fornece um ambiente consistente e seguro, e procedures podem
assegurar que cada operação seja registrada de forma apropriada. Neste tipo de condiguração,
aplicações e usuários não conseguiriam nenhuma acesso as tabelas do banco de dados
diretamente, mas apenas podem executar stored procedures específicas.
Stored procedures e funções são rotinas criadas com as instruções CREATE PROCEDURE e CREATE
FUNCTION. Um procedimento é chamado usando uma instrução CALL e só pode passar valores de
retorno usando variáveis de saída. Funções podem retornar um valor escalar e pode ser chamadas de
dentro de uma instrução como qualquer outra função (isto é, chamando o nome da funcao). Rotinas
armazenadas podem chamar outras rotinas armazenadas. Uma rotina pode ser tanto um procedimento
como uma função.
CRIANDO STORED PRODECURES
Para criarmos STORED PROCEDURES no MySQL utilizamos a seguinte sinxtaxe básica:
DELIMITER $$
CREATE PROCEDURE nomeprocedure ()
BEGIN
/* Aqui vai o código da procedure */
END
Criaremos agora uma stored procedure que irá atualizar o salário de um determinado fincionário,
aumentando-0 em 300 reais.
DELIMITER $$
CREATE PROCEDURE AumentarSalario(vcpf varchar(20))
BEGIN
UPDATE funcionario SET salario = salario + 300 where funcionario.cpf=vcpf;
END
Para realizarmos a chamada a procedure utilizar o comando CALL.
CALL AumentarSalario ('02396423487');
Exercício 1
Vamos agora criar uma stored procedure para diminuir o salário. Para isso criar uma procedure
chamada DiminuirSalario que receba o Cpf do funcionário e reduza seu salário em 500 reais.
Comandos de maipulação de dados são comuns de serem encapsulados em Stored Procedores(SP). Por
exemplo a inclusão de registros na base de dados pode ser feita diretamente em SP trazendo vantagens
de performace e segurança.
O seguinte exemplo realiza uma inclusão na tabela localizacao_dep
DELIMITER $$
CREATE PROCEDURE `INSERIRLOCALIZACAO`(vDnumero INT, vDlocal VARCHAR(100))
BEGIN
INSERT INTO `empresa`.`localizacao_dep` (`Dnumero`, `Dlocal`) VALUES (vDnumero, vDlocal);
END
Realizando a chamada:
CALL INSERIRLOCALIZACAO(32,'João Pessoa');
Exercício 2
Criar stored procedures para inclusão das seguintes tabelas:
•
•
•
Projeto
Dependente
Trabalha_Em
Inserir registros através da chamada a essas tabelas.
Exercício 3
Criar stored procedure para excluir registro da tabela Funcionario.
Exercício 4
Criar uma stored procedure para excluir um registro da tabela Projeto. Esta exclusão deve obedecer a
seguinte regra:
•
Antes da exclusão do projeto deve-se excluir todas as referências de trabalhos realizados no
mesmo.
Utilizando variáveis em Stored Procedures
Sintaxe básica:
DECLARE nome TIPO;
Exemplo:
DECLARE nome VARCHAR(30);
Podemos definir um valor padrão para nossa variável na inicialização:
DECLARE valor INT DEFAULT 0;
Declarar várias variáveis em uma mesma linha:
DECLARE vidgrupo , vnomeCientifico varchar(255);
Para atribuir um valor para minha variável, utiliza-se o comando SET.
Exemplo:
SET valor = 300;
SET nome = ‘João’;
Operador Condicional
Sintaxe básica:
if condição then
/*comandos*/
end if;
exemplo:
if salario > 5000 then
set cargo =’Gerente de Projeto’;
end if;
Exemplo com else:
if strtipo='s' then
set vidunidadedispersao = vidsementeud;
else
set vidunidadedispersao = vidfrutoud;
end if;
Exercício 5
Criar uma store procedure que receba o cpf do funcionário e uma variável de opcão. Se opção for 1,
deve aumentar em 300 reais o salário do funcionário, caso contrário reduzir o mesmo em 500 reais.
Exercício 6
Cria uma store procedure que deve atualizar o salário de todos os funcionários que são gerentes.
Sabendo que o salário dos gerentes é composto de:
•
•
•
Vencimento Base: 3500,00;
Auxílio Viagem: 1200,00;
Bônus: 1000,00.
Armazenar cada valor em uma variável dentro da procedure realizando a alteração para todos os
funcionários que são gerentes sempre que a procedure for executada.
CRIANDO FUNCTIONS(Funções)
Sintaxe Básica:
CREATE FUNCTION nomefunction () RETURNS tipoRETORNO
BEGIN
RETURN valor_retorno;
END
Chamando a function:
SELECT nomefunction();
Exemplo:
DELIMITER $$
CREATE FUNCTION exemploFunc () RETURNS varchar(50) DETERMINISTIC
BEGIN
RETURN 'HELLO!!!!’;
END
Chamando a function:
SELECT exemploFunc();
Agora vamos o exemplo anterior para receber um nome e retornar a frase como o exemplo:
SELECT exemploFunc(‘Marcelo’);
HELLO!!!! Marcelo
Como apresentado no comando acima, as functions são chamadas em comando SQL, podendo estar
inseridas dentro de comandos SQL mais complexos, vejamos o exemplo relacionado a tabela empresa:
SELECT empresa.exemplo(Pnome) as OlaFuncionario from funcionario;
Executando o comando acima temos uma pequena amostra das possibilidades de soluções que temos
utilizando functions em nosso banco de dados.
Exercícios:
1) Criar uma consulta que retorne o nome do funcionário e o número médio de horas que o
mesmo trabalhou por projeto. O cálculo da média deve ser realizado em uma function chamada
mediaProjeto. Se o funcionário não trabalhou em nenhum projeto deve ser retornado zero.
2) Considerando que a empresa gasta 200 reais por dependente, criar uma function que retorne o
total de gasto da empresa para um determinado funcionário. Utilizar a function em uma
consulta que retorne o nome de cada funcionário e o total gasto por funcionário.
3) Adaptar o exercício 1 para desconsiderar o projeto 2.
4) Criar uma function que retorne os anos passados entre a data atual e uma determinada data
recebida. Criar uma consulta que retorne o nome do funcionário e a idade do mesmo.
Referência: http://dev.mysql.com/doc/refman/4.1/pt/date-and-time-functions.html
Download