É comum ver aplicações cujo o seu banco possui um grande número de procedures. Tudo bem se essas serem uma para cada funcionalidade, mas se temos de fazer um SELECT avançado, como vou mostrar no exemplo, muitos escolhem criar várias procedures para um objetivo. Neste artigo estarei mostrando exemplos de criação de variáveis no MySql 5, o mesmo prosegue para outros bancos como MS SQL Server, entre outros.
Em uma aplicação existe um banco de dados onde neste existe uma tabela de clientes, esta tabela possui os respectivos campos:
- CustumerID(integer-primarykey-autoincrement);
- Name(varchar(50));
- CustumerType(integer);
Ignorando a existência de uma tabela querelaciona ostipos de clientes (CustumerType), cuja finalidade éinterpretar cadacliente conforme o seu tipo, por exemplo, nestetabela no campo CustumerType, consideremos que o valor: 0 equivale a um cliente normal, que 1 equivale a um clienteVIP, que 2 equivale a um clienteSpecial e finalmente 3equivalendo a um cliente Ultra Special.
A seguinte tarefa foi proposta aos desenvolvedores, a empresa queria resgatarumcliente, descrevendo o seu tipo e por último seu juros conforme o tipo de cliente.
O código SQL abaixo resgata facilmente o que foi requerido, nele uso várias tecnologias, umas novas para os mais novatose outras super conhecidas para o mesmo. São elas:
- DECLARE- Declara uma variável, prosseguida do tipo que vai ser, ex: varchar(45);
- SELECT INTO - Faz um select e o preenche em uma variável, ex: Select a,b INTO d,e... sendo d,e variáveis declaradas
DELIMITER $
CREATE PROCEDURE `Devmedia_SelectCustumer`(IN _ID INT)
BEGIN
DECLARE _Type INT;
SELECT CustumerType INTO _Type FROM Custumers WHERE CustumerID = _ID;
CASE _Type
WHEN 0 THEN
SELECT
CustumerName,
CLiente normal,
1.5% de juros,
FROM
Custumers
WHERE
CustumerID = _ID;
WHEN 1 THEN
SELECT
CustumerName,
CLiente VIP,
1.1% de juros,
FROM
Custumers
WHERE
CustumerID = _ID;
WHEN 2 THEN
SELECT
CustumerName,
CLiente Special,
0.8% de juros,
FROM
Custumers
WHERE
CustumerID = _ID;
WHEN 3 THEN
SELECT
CustumerName,
CLiente ULTRA Special,
0.5% de juros,
FROM
Custumers
WHERE
CustumerID = _ID;
END CASE;
END $
DELIMITER ;