A maioria das pessoas não utiliza todos os recursos disponíveis para os SGBDs, tais como Stored Procedures e Triggers.
Primeiramente vamos a algumas questões.
O que é uma Stored Procedure?
É uma colação de comandos SQL, que encapsula uma série de tarefas repetitivas, relativas ao acesso a banco, aceita parâmetros de entrada e retorna um valor de status ou conjunto de registros.
Por que usar um Stored Procedure?
As Stored Procedures ajudam a reduzir o tráfego na rede, a melhorar o desempenho de consultas, a criar mecanismos de segurança e simplificar o código da aplicação, já que não haverá a necessidade de manter consultas SQL de várias linhas misturadas a toda lógica da sua aplicação.
Então vamos ao banco exemplo:
É um banco bem simples, mas é só para vermos na prática o funcionamento das procedures.
Vamos a primeira, listar países:
DELIMITER $$
DROP PROCEDURE IF EXISTS `listar_paises` $$
CREATE PROCEDURE `listar_paises`(IN _id INT)
BEGIN
IF(_id IS NULL) THEN
SELECT * FROM pais;
ELSE
SELECT * FROM pais where id_pais = _id;
END IF;
END $$
DELIMITER ;
Vamos a explicação.
DELIMITER $$ - Serve para marcar onde começa e onde termina a procedure, neste caso eu escolhi "$$"
DROP PROCEDURE IF EXISTS `listar_paises` - nesta linha eu informo ao SGBD que se a procedure já existir eu a estarei sobrescrevendo.
CREATE PROCEDURE - irá cria a procedure, note que há um parâmetros para esta procedures. Os parâmetros podem ser IN, apenas de entrada, OUT, apenas de saída e INOUT, entrada e saída. Os tipos de dados dos parâmetros são os mesmo tipos de dados do SGBDs ( INT, VARCHAR(45), TEXT, BLOB...)
Entre os comandos BEGIN e END é que serão colocados os comandos executados pela procedures.
Primeiramente eu verifico se foi passado o parâmetro id para a procedure.
IF(_id IS NULL) THEN
Caso tenha sido passado eu busco um país com aquele id, em caso contrário serão retornados todos os registros da tabela.
Chamando a procedure.
call listar_paises( null );
Irá trazer todos os registros da tabela
call listar_paises( 1 );