Sidebar

Los store procedures son una nueva caracteristicas en la versión 5.0, tiene muchas ventajas su uso. Aprende que son y como funcionan en este pequeño tutorial.

Una store procedure es un pequeño programa que se encuentra almacenado en la base de datos, tiene muchas ventajas su uso ya que pueden realizarse cambios de código sin necesidad de afectar a la aplicación, también nos ayuda a minimizar el tráfico en la red ya que en lugar de mandar una sentencia larga, solo se manda a ejecutar el nombre corto del store procedure, por lo que su ejecución se vuelve mucho más rápida.

Para poder hacer uso de los store procedures debemos contar con la versión 5.0 de MySQL. Hagamos una pequeña demostración de ellos a continuación:

Antes que nada debemos revisar que contamos con la versión 5.0 de MySQL como mínimo, podemos usar cualquiera de las siguientes dos formas.

mysql> show variables like '%version%';
+-------------------------+-------------------------------+
| Variable_name | Value |
+-------------------------+-------------------------------+
| protocol_version | 10 |
| version | 5.0.18 |
| version_comment | MySQL Community Edition (GPL) |
| version_compile_machine | ia32 |
| version_compile_os | Win32 |
+-------------------------+-------------------------------+
5 rows in set (0.03 sec)

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.0.18 |
+-----------+
1 row in set (0.20 sec)

Si observamos que contamos con la versión 5.0.x, podemos estar seguros de que nuestro store procedure va a funcionar.

Primero debemos de crear una base de datos en donde trabajar y pasarnos a ella.

mysql> create database dbprueba;
Query OK, 1 row affected (0.08 sec)

mysql> use dbprueba;
Database changed

Creemos una tabla de ejemplo

mysql> create table t (c1 int);
Query OK, 0 rows affected (0.22 sec)

mysql> insert into t values (1);
Query OK, 1 row affected (0.06 sec)

Ahora creemos nuestro primer store procedure.

mysql> CREATE PROCEDURE p1 ()
-> SELECT * FROM t;
Query OK, 0 rows affected (0.00 sec)

El nombre del store procedure puede ser en mayúsculas o minúsculas pues no son case sensitive.

Ahora la forma de ejecutarlo es muy diferente a los manejadores como SQL Server o Sybase donde se hacen mediante la sentencia exec, aquí se usa la sentencia call y colocando al final los paréntesis.

mysql> call p1();
+------+
| c1 |
+------+
| 1 |
+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Este procedure de ejemplo fue muy sencillo, lo que me interesaba era que observaran la forma de crearlos y de ejecutarlos. Yo coloque un select muy simple en el ejemplo, pero puede colocarse sentencias de INSERT, UPDATE, SELECT, DROP, CREATE, REPLACE.

Sobre las sentencias que no se pueden usar dentro de un store procedure son:

CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, CREATE FUNCTION, DROP FUNCTION, CREATE TRIGGER, DROP TRIGGER.

También el uso de “USE database” no es permitido, ya que MySQL asume que la base de datos por default es donde se encuentra creado el procedure.

Ahora si quisieramos introducir parámetros de entrada al store procedure sería de la siguiente forma.

mysql> CREATE PROCEDURE p5(p INT) SET @x = p;
Query OK, 0 rows affected (0.00 sec)
mysql> CALL p5(12345);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @x;
+-------+
| @x |
+-------+
| 12345 |
+-------+
1 row in set (0.00 sec)

Ahora uno con un parámetro de salida

mysql> CREATE PROCEDURE p6 (OUT p INT)
-> SET p = -5 //
mysql> CALL p6(@y)//
mysql> SELECT @y//
+------+
| @y |
+------+
| -5 |
+------+

Como pueden observar es muy sencillo el uso de store procedures en MySQL. A los que han programado en otros manejadores de Bases de Datos como Sybase o SQL Server les va a ser muy sencillo aprenderlo.


Tips BD