Variáveis com SQL - Declare e Select INTO

Recupere dados do banco incrementando variáveis em seu comando SQL, evitando várias procedures para conseguir o mesmo resultado!

É 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:

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:

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 ;

Artigos relacionados