Los procedimientos almacenados son un conjunto de comandos SQL que se almacenan en el gestor de la base de datos; facilitando en alguna medida que los desarrolladores sigan el lema DRY (No te repitas tu mismo), pues las sentencias se escriben una sola ves y pueden ser llamadas en cualquier momento y estas devolverán el resultado de los valores solicitados.
Poner
en practica esta utilidad nos brinda ventajas y desventajas, como
estas:
Ventajas:
- Mejoran el rendimiento ya que se envía menos información entre cliente y servidor.
- La respuesta a una petición, está directamente bajo el control del motor de base de datos.
- Aseguran la integridad de los datos, validando la información que será ingresada o editada.
- Brinda seguridad pues en la red solo está visible la llamada al procedimiento almacenado mas no los nombres de los objetos de base de datos y tablas.
Desventajas:
- Carga de procesos excesiva en el servidor de base de datos.
Ejemplo
de procedimientos almacenados en MySQL
Estos
son los
necesarios para realizar el mantenimiento (CRUD) a las entidades, así
como la búsqueda de información dentro de ella:
SELECT:
-- -------------------------------------------------------------------------------- -- Autor: Kevin Eduardo Moran Ramirez -- Note: Procedimiento almacenado en MySQL para consulta select -- -------------------------------------------------------------------------------- DELIMITER $$ CREATE PROCEDURE `consulta_select` ( IN Tabla VARCHAR(50), IN Campos VARCHAR(255), IN Donde VARCHAR(255), IN AgruparPor VARCHAR(50), IN OrdenarPor VARCHAR(50) ) BEGIN # Verifico que si las variables contienen parametros IF Donde <> '' THEN SET Donde = CONCAT(' WHERE ', Donde); END IF; IF AgruparPor <> '' THEN SET AgruparPor = CONCAT(' GROUP BY ', AgruparPor); END IF; IF OrdenarPor <> '' THEN SET OrdenarPor = CONCAT(' ORDER BY ', OrdenarPor); END IF; SET @VConsulta = CONCAT( "SELECT ", Campos , " FROM ", Tabla, Donde, AgruparPor, OrdenarPor, ";" ); #Preparo y ejecuto la sentencia SQL PREPARE Declaracion FROM @VConsulta; EXECUTE Declaracion; END
INSERT:
-- -------------------------------------------------------------------------------- -- Autor: Kevin Eduardo Morán Ramirez -- Note: Procedimiento almacenado en MySQL para consulta insert into -- -------------------------------------------------------------------------------- DELIMITER $$ CREATE PROCEDURE `consulta_insertar` ( IN Tabla VARCHAR(50), IN Campos VARCHAR(255), IN Valores VARCHAR(255) ) BEGIN SET @VConsulta = CONCAT( "INSERT INTO ", Tabla , "(" , Campos , ") VALUES(" , Valores , ")" ); PREPARE Declaracion FROM @VConsulta; EXECUTE Declaracion; END
UPDATE:
-- -------------------------------------------------------------------------------- -- Autor: Kevin Eduardo Morán Ramirez -- Note: Procedimiento almacenado en MySQL para consulta update -- -------------------------------------------------------------------------------- DELIMITER $$ CREATE PROCEDURE `consulta_actualizar` ( IN Tabla VARCHAR(50), IN Establecer VARCHAR(255), IN Donde VARCHAR(255) ) BEGIN SET @VConsulta = CONCAT( "UPDATE " , Tabla , " SET " , Establecer ," WHERE " , Donde ); PREPARE Declaracion FROM @VConsulta; EXECUTE Declaracion; END
DELETE:
-- -------------------------------------------------------------------------------- -- Autor: Kevin Eduardo Morán Ramirez -- Note: Procedimiento almacenado en MySQL para consulta delete -- -------------------------------------------------------------------------------- DELIMITER $$ CREATE PROCEDURE `consulta_eliminar` ( IN Tabla VARCHAR(50), IN Donde VARCHAR(255) ) BEGIN SET @VConsulta = CONCAT( "DELETE " , Tabla , " WHERE " , Donde ); PREPARE Declaracion FROM @VConsulta; EXECUTE Declaracion; END