Mostrando las entradas con la etiqueta Procedimientos almacenados. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Procedimientos almacenados. Mostrar todas las entradas

lunes, 12 de mayo de 2014

Procedimientos almacenados en MySQL



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