miércoles, 10 de agosto de 2016

Procedimientos Almacenados en MySQL (MariaDB) Parte I

Crear procedimientos Almacenados en MySQL (MariaDB)

Un procedimiento es un conjunto de instrucciones que se almacenan en el servidor, para usarlas posteriormente, ya que se usarán frecuentemente y contienen acciones programadas, el uso de los procedimiento simplificará el uso de esas instrucciones, ya que no tendremos que volver a teclear todas las instrucciones, sino solamente invocaremos al procedimiento, la instrucción PROCEDURE, hace referencia al procedimiento almacenado, un procedimiento almacenado (SP) (Stored Procedure) acepta parámetros de entrada, para darle más dinamismo, pero para entenderlo mejor, como siempre nos pondremos manos a la obra y haremos lo que nos gusta, que es hacerlo.Primero veamos algunas ventajas de utilizar los procedimientos almacenados

Ventajas del uso de los procedimientos almacenados

  • Seguridad: Los procedimientos ocultan el nombre de las tablas, de manera que nadie podrá saber que tablas se mandan llamar.
  • Velocidad: Los procedimientos almacenados son más veloces, que ejecutar una a una las instrucciones, ya que están parametrizados.
  • Estándares de programación: El uso de procedimientos almacenados es un estandard de la programación y su uso es recomendable
Ejercicio 1
Crear un procedimiento que muestre los equipos y los estadios utilizando un STORED PROCEDURE (SP)  o PROCEDIMIENTO ALMACENADO

DROP PROCEDURE IF EXISTS estadiosxequipos;
DELIMITER $$
CREATE procedure estadiosxequipos()
BEGIN
select eq.idequipo, eq.abreviacion, eq.nombre, e.nombre as NombreEstadio, e.ciudad
from equipos eq
inner join estadios e
on e.idestadio=eq.idestadio;
END;
        $$

Paramos desde la primera línea de este código

DROP PROCEDURE IF EXISTS estadiosxequipos;

Esta instrucción le indica a la base de datos que si ya existe el procedimiento, lo borre, para crearlo otra vez, es una manera de ahorrarnos líneas,

DELIMITER $$

Delimiter nos sirve para indicar que el fin de la instrucción no es punto y coma (;), ya que será un bloque de código y si no se indicara, al encontrar el punto y coma, el servidor daría por terminada la instrucción, se puede utilizar cualquier símbolo o caracter, en este caso yo utilizaré los dos signos de pesos ($$)

CREATE procedure estadiosxequipos()
BEGIN

Después tenemos éstas dos líneas, la primera la instrucción CREATE PROCEDURE, le indica al servidor que creará un nuevo procedimiento almacenado llamado estadiosxequipos() con paréntesis vacíos, ya que no llevará parámetros. 

La instrucción BEGIN le indicará a la base de datos que comienza el bloque de instrucciones,

select eq.idequipo, eq.abreviacion, eq.nombre, e.nombre as NombreEstadio, e.ciudad
from equipos eq
inner join estadios e
on e.idestadio=eq.idestadio;
END;
        $$

El bloque de instrucciones contiene una instruccion SELECT, y posteriormente la instrucción END; que es la que nos indica que ahí acaba el bloque de instrucciones, despues, el delimitador que le indicamos $$ para ejecutar y crear el SP.

Para ejecutar un procedimiento almacenado lo invocaremos con la instrucción call de la siguiente manera:

call estadiosxequipos();

Al llamar al procedimiento obtenemos el siguiente resultado:


Como ven, en este ejemplo nos muestra la consulta realizada dentro del procedimiento almacenado, este ejemplo también podriamos realizarlo con una vista, en la imagen no se aprecia, pero muestra todos los equipos de la base de datos, con su respectivo estadio, este el un ejemplo muy sencillo de un SP, ya que no contiene parámetros y tampoco variables, pero veremos ejemplos más complejos. Por ejemplo, ¿que pasaría si yo quisiera los estadios de los equipos de un país en particular? Pues se podría hacer con un procedimiento almacenado con parámetros, veamos el siguiente ejemplo:

Ejercicio 2
Crear un procedimiento almacenado que nos permita saber los equipos dados de alta y el estadio donde juegan, creando como parámetro el código del país

DROP PROCEDURE IF EXISTS estadiosxequipos;
DELIMITER $$
CREATE procedure estadiosxequipos(pais varchar(3))
BEGIN
select eq.idequipo, eq.abreviacion, eq.nombre, e.nombre as NombreEstadio, e.ciudad
from equipos eq
inner join estadios e
on e.idestadio=eq.idestadio
inner join paises p
on p.codigopais = eq.codigopais
where eq.codigopais=pais;
END;
        $$   

Analicemos algunos de los pequeños cambios hechos al procedimiento almacenado, consideremos las siguientes líneas

CREATE procedure estadiosxequipos(pais varchar(3))
BEGIN

En este caso le añadimos parámetros al procedimiento almacenado, como ven, se llama igual, pero ahora contendrá un parámetro llamado pais, que es del tipo varchar con tres caracteres de longitud

where eq.codigopais=pais;

En esta instrucción le indicamos a la consulta que el codigo de pais será igual a la variable país que pusimos en el procedimiento almacenado.

Lo mandamos llamar de la siguiente manera:

call estadiosxequipos('MX')      



Como ven, mandamos llamar únicamente los equipos de México, pero podríamos llamar los equipos de Francia, de la siguiente manera:

call estadiosxequipos('FRA')   


Como pueden ver, basta con cambiar el parámetro para que cambie el resultado de la consulta.

Hasta aquí la primera parte de como crear procedimientos almacenados, en la próxima entrega veremos más ejemplos, mas complejos y más útiles de procedimientos almacenados, les pido compartan, den +1 o algún clic en algún anuncio que les interese, gracias y hasta la próxima


Banderas de Visitantes

Flag Counter