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!