Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) almacenado físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
Los procedimientos pueden ser ventajosos: cuando una base de datos es manipulada desde muchos programas externos. Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida. Esto puede simplificar la creación y, particularmente, el mantenimiento de los programas involucrados.
Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una misma operación en un servidor dentro de algunas o todas las bases de datos y a la vez dentro de todas o algunas de las tablas de las bases de datos del mismo. Para ello podemos utilizar a los Procedimientos almacenados auto creables que es una forma de generar ciclos redundantes a través de los procedimientos almacenados.
Hoy en día existe un debate si se debe de usar procedimientos almacenados, en mi opinión digo que si, hay pros y contras en usar procedimientos almacenados, pero al final es mejor mejor practica usarlos ya que funcionara mas eficientemente siempre y cuando se haga bien, también si se da el caso de que sea una aplicación de escritorio la mayor parte de las veces no se necesitara recompilar y actualizar el ejecutable, si no que solo se tendrá que modificar la base de datos .
Bien como prueba vamos a hacer un procedimiento almacenado básico, tal procedimiento va a insertar en la tabla clientes y luego ejecutara una consulta.
CREATE PROCEDURE `SPR_InsertaCliente`(IN `strNombre` VARCHAR(256)
, IN `strRFC` VARCHAR(15)
, IN `strDireccion` VARCHAR(15))
BEGIN
insert into clientes(nombres
,RFC
,direccion )
values( strNombre
,strRFC
,strDireccion );
select * from clientes;
END;
Ahora mandamos llamar el procedimiento almacenado que hara 2 cosas, una es insertar
SET
@p0 = 'Cesar';
SET
@p1 = 'XXXA';
SET
@p2 = 'Conocido';
CALL
`SPR_InsertaCliente`(@p0, @p1, @p2);
O simplemente lo podemos invocar de la siguiente manera
CALL SPR_InsertaCliente('Cesar', 'XXXA', 'Conocido');
El resultado será el siguiente
id nombres RFC direccion
1 Julio xxx conocido
2 kakaroto xxe vegita
3 Cesar XXXA Conocido
4 Cesar XXXA Conocido
5 Cesar XXXA Conocido
Nos arroja varias ya que hemos ejecutado varias veces el procedimiento