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.

You are not authorised to post comments.

Comments powered by CComment

DBASupport - Foro

Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 2 weeks ago.
  • 2 weeks ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
  • Topic started by carlos25
  • in General
  • 5 months ago.
  • 5 months ago.
  • 2 replies
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Estadisticas en la base de datos
Buenos días, estoy teniendo problemas de performance en mis queries y quisiera saber como puedo validar que mis tablas tienen las estadisticas...
URGE AYUDA
  • Topic started by
  • in General
  • 13 years ago.
  • 13 years ago.
  • 30 replies
HOLA ESPERO ME PUEDAN AYUDAR. TEN GO UNA TABLA CON una estructura similar a la siguiente: id_mov cargo subtotal total...

Duada de Memoria de SQL Server 2005
  • Topic started by Erzengel
  • in General
  • 8 years ago.
  • 8 years ago.
  • 30 replies
Buen Día Recurro nuevamente a su sabiduría. Quiero saber el porque tiene un tope SQL Serever de 2GB en Windows server 2003 de 32 bit y si alguien...

SqlDateTime overflow
  • Topic started by
  • in General
  • 12 years ago.
  • 12 years ago.
  • 11 replies
Alguno de ustedes ha tenido este problema: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.' Les...

Problemas para levantar mirror
  • Topic started by acgch
  • in General
  • 11 years ago.
  • 11 years ago.
  • 16 replies
Hola amigos, tengan un buen día, les comento que estoy configurando mirror siguiendo los pasos a través del wizard del managment studio y también...

problemas para iniciar el agente sql
  • Topic started by acgch
  • in General
  • 11 years ago.
  • 11 years ago.
  • 11 replies
Recientemente para asegurar el sql server 2005, cree una cuenta sql con derechos de sysadmin y borre el grupo BUILTIN\Administradores para evitar...
Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 2 weeks ago.
  • 2 weeks ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
  • Topic started by carlos25
  • in General
  • 5 months ago.
  • 5 months ago.
  • 2 replies
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Estadisticas en la base de datos
Buenos días, estoy teniendo problemas de performance en mis queries y quisiera saber como puedo validar que mis tablas tienen las estadisticas...
Deshabilitar todos los jobs
  • Topic started by agamez
  • in Jobs
  • 10 months ago.
  • 10 months ago.
  • 1 reply
Buenos días, alguien sabe como puedo deshabilitar rapidamente todos los jobs de SQL Server, gracias.

Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 2 weeks ago.
  • 2 weeks ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
  • Topic started by carlos25
  • in General
  • 5 months ago.
  • 5 months ago.
  • 2 replies
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Necesitas Soporte

Proveemos soporte de base de datos SQL Server, Sybase, Oracle y MySQL. Nuestro servicio, le permite contar con un experto las 24 horas al día los 365 días del año.

Nuestros servicios están diseñados para que solo pague por el soporte que necesita. El pago se realiza de manera mensual basado en el nivel de cobertura que requiera. En promedio este costo va de un 30% a un 60% menos, de lo que le pagaría a un DBA en sitio.

Contactanos