

Nesse artigo vou estar falando um pouco sobre Stored Procedures e demonstrar um pequeno exemplo de sua utilização no MySQL/MariaDB.
Ambiente utilizado:
Computador: Notebook Gateway
Sistema operacional: OpenSuse 11.2
Banco de dados: MariaDB 5.1.42
O que é Stored Procedure?
Stored Procedures nada mais são do que um conjunto de instruções SQL que são executadas dentro do banco de dados.
É como escrever um programa dentro do próprio banco de dados para executar tudo lá dentro.
Sintaxe geral:
CREATE PROCEDURE (tipo_param param_1 data_type, …)
[BEGIN]
corpo_da_rotina;
[END]
Ao passar os parâmetros para uma procedure você pode definir o seu tipo:
IN => parâmetro de entrada.
OUT => parâmetro de retorno.
INOUT => parâmetro de entrada e de retorno.
Caso no parâmetro não seja informado o seu tipo, o padrão adotado é IN.

Exemplo prático:
Criaremos uma procedure que irá “popular” uma tabela denominada Cliente com o nome e email.
1. No terminal, conecte-se ao MariaDB.
mysql -u root -p
2. Criação do banco de dados:
CREATE DATABASE mysqllabs;
3. Criação da tabela CLIENTE:
CREATE TABLE IF NOT EXISTS mysqllabs.cliente (
id INT NOT NULL AUTO_INCREMENT ,
nome VARCHAR(45) NOT NULL ,
email VARCHAR(80) NOT NULL ,
PRIMARY KEY (id) )
ENGINE = Maria;
O campo ID é um auto incremento e possui mais dois atributos: nome e email.
A tabela foi criada usando a STORAGE ENGINE Maria. Caso não conheça Storage Engines dê uma olhada nesse artigo escrito pelo Alexandre Almeida
(http://www.mysqllabs.com/joomla/index.php?option=com_content&view=article&id=55:storageengine1&catid=1:latest-news&Itemid=100).
4. Criaremos uma procedure chamada INS_CLIENTE que terá como parâmetros de entrada o NOME e o EMAIL. Os dados serão inseridos na tabela CLIENTE.
delimiter //
CREATE PROCEDURE mysqllabs.ins_cliente(in pnome VARCHAR(45)
,in pemail VARCHAR(80) )
BEGIN
INSERT INTO cliente(nome, email)
VALUES(pnome, pemail);
END
//

Agora vocês me perguntam. O que significa o DELIMITER antes de criar a procedure?
A mudança de delimitador de linha serve para que o MariaDB não interprete o ‘;’ nos comandos que listamos dentro de um gatilho, procedimento, etc…Se deixássemos o ;(ponto e vírgula) no final do INSERT o nosso comando seria encerrado incorretamente.
5. Para executar a procedure basta utilizar o comando CALL.
DELIMITER ;
call mysqllabs.ins_cliente(‘julio’, ‘julio@mysqllabs.com’);
6. Para checar se inserção foi efetuada na tabela, execute o comando:
select * from mysqllabs.cliente;
Depois de criar a stored procedure no MySQL como que faço para consultar?
Depois de criados e compilados, as stored procedures são inseridas em uma tabela chamada ROUTINES no banco de dados INFORMATION_SCHEMA, que é o dicionário de dados do MySQL.
Para listarmos, basta emitirmos o seguinte comando:
SELECT * FROM INFORMATION_SCHEMA.ROUTINES;
Se preferir, pode-se utilizar o comando: SHOW PROCEDURE STATUS;
Ele retorna características da rotina, tais como nome, tipo, quem criou, datas de modificação e criação.
Outra alternativa é utilizar o comando: SHOW PROCEDURE STATUS LIKE ‘%ins%’;
Sendo que no LIKE informamos o nome da procedure ou um pedaço de sua descrição para pesquisa, no nosso caso informei a string INS.
Espero que tenham gostado e até a próxima semana!
Visite nosso Blog
Saiba mais sobre bancos de dados
Aprenda sobre monitoramento com ferramentas avançadas

Tem dúvidas sobre nossos serviços? Acesse nosso FAQ
Quer ver como ajudamos outras empresas? Confira o que nossos clientes dizem nesses depoimentos!
Conheça a História da HTI Tecnologia