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