Procedimientos almacenados en MySql

Muchas veces puedes querer validar algún conjunto de campos o abstraer una serie de operaciones dejando que sea el gestor quien ejecute las operaciones sobre la base de datos (de aquí en más BBDD) y de una sola vez, en lugar de estar ejecutando consultas desde el servidor una y otra vez ya sea mediante Php, C#, Python etc. En estos casos puede ser muy útil utilizar las funciones y procedimientos almacenados o los triggers y/o eventos que provee MySql.

¿Qué son las funciones y los procedimientos almacenados?

Ambos son objetos que residen de forma global dentro de tu BBDD.  El término global hace referencia al hecho de que cualquier tabla puede utilizar esa función y/o procedimiento (ejemplo: función MAX()).

Las funciones y procedimientos no están vinculadas a una tabla específica como sí lo están los triggers.

Sintaxis de un procedimiento almacenado 

Imagen 1-Sintaxis de un procedimiento.

CREATE PROCEDURE : Directiva que le dice a MySql que vas a crear un procedimiento.

sp_name : nombre del procedimiento.

PARAMETER: Son los parámetros del procedimiento. Esto es el nombre seguido de un tipo de dato válido por MySql.


Podés asociar un procedimiento de MySql con un lenguaje de programación como C++:

void decrementarCantProductos(string nombreProducto){

//declaraciones

}

void = CREATE PROCEDURE

string nombreProducto = NOMBRE_PRODUCTO VARCHAR(40)

{} = BEGIN, END

Tipos de parámetros

IN: El procedimiento trabajará con una copia de su valor, teniendo el parámetro su valor original al terminar la ejecución del procedimiento.

OUT: El valor de parámetro puede ser cambiado en el procedimiento retornando el valor modificado al programa que invoco el procedimiento. 

INOUT: Es una mezcla de los dos anteriores.

Bueno voy a mostrar un ejemplo muy sencillo.

Creamos una tabla llamada productos.

Imagen3-Creación de la tabla productos
Imagen 2- Creación de la tabla productos.

Lo que vamos hacer es pasarle un nombre de un producto que esté en la BBDD. El procedimiento va a realizar los siguientes pasos:


1 - Obtener la cantidad del producto ingresado.

2 - Verificar que la cantidad de ese producto sea mayor que 0.

3 - Si es mayor que 0 obtener la id del producto.

4 -  Actualizar la cantidad de productos.

codigo fuentes de la bd.

Imagen 3- Creación del procedimiento.


Insertamos un producto.

Imagen 4- Carga de un producto en la tabla productos.

Vemos que se creó con el valor fijado.


Nota: Podemos modificar el procedimiento y agregar el parámetro cantProduct. En el almacenaremos la cantidad de ejemplares que tenemos de un producto para su venta.


Para llamar al procedimiento utilizamos la palabra reservada CALL.


En nuestro caso es CALL DECREMENTAR_CANT_PRODUCTOS(‘HARINA’);

Ejecutamos una vez y el resultado es.

Imagen 5 -resultado del campo cantidad_productos después de haber llamado  al procedimiento


Volvemos a ejecutarlo.
Imagen 6 -resultado del campo cantidad_productos después de haber llamado por segunda vez al procedimiento

Conclusión

El procedimiento almacenado es una herramienta muy útil para ejecutar un conjunto de operaciones en una BBDD. Solamente tenes que llamar al procedimiento pasarle los argumentos y listo.

También ayuda a no tener que estar repartiendo código entre el gestor y un framework web. Esto ayuda a disminuir la cantidad de escritura de código en el servidor.

Personalmente, los utilizo mucho además de todo lo dicho anteriormente a veces utilizo el concepto de sobre carga (un concepto de la POO) con lo cual se escribe una menor cantidad de funciones y más si estas hacen cosas similares.


Código del ejemplo


¡Saludos pro.grammersJr del mundo!


Comentarios