Procedimientos Almacenados en Mysql

En su versión actual Mysql soporta la creación de procedimientos almacenados tanto para sus engines InnoDb como MyIsam. Esto nos brinda la ventaja de colocar dentro de nuestro motor de base de datos todo el código SQL necesario para realizar las operaciones que nuestros sistemas requieren. Con la ventaja de tener centralizado nuestro código, hacerlo más sencillo de mantener y aprovechar la generación del plan de ejecución que optimiza la ejecución de nuestras consultas.

Crear un procedimiento almacenado o “Stored Procedure” como generalmente se les conoce no es otra cosa que programar un script en lenguaje PLSQL, que es el lenguaje de programación usado por la mayoría de los motores de bases de datos existentes en el mercado, claro que cada fabricante establece sus propias convenciones de codificación aunque en lo general todos se rigen como mínimo por el estándar ANSI SQL 92. Si deseas saber un poco más de estándares SQL puedes darle una leída a esta entrada en la wikipedia: http://es.wikipedia.org/wiki/SQL. Como comentario adicional me gustaría decir que en SQL Server de Microsoft el lenguaje es conocido como T-SQL.

En este artículo crearemos un procedimiento almacenado en Mysql que nos devolverá el nombre completo de un usuario a partir de su username o clave de usuario.  Por tanto el procedimiento almacenado debe recibir como valor de entrada una cadena y devolver un recordset conteniendo los datos: Nombre, Paterno y Materno. Sobre la creación de los procedimientos, Mysql establece en su documentación que la sintaxis para su creación debe ser :

CREATE PROCEDURE sp_name ([parameter[,…]]) [characteristic …] routine_body

 

Para crear los procedimientos almacenados tendremos que hacer uso de un editor o algún cliente de Mysql, para esto existen muchas herramientas, Mysql mismo ofrece su developers tools aunque en lo personal, para crear mis procedimientos almacenados uso un editor de consultas llamado “Dream Coder for Mysql” de la empresa Mentat Technologies quien ofrece sus herramientas de manera gratuita y de libre uso. Puedes descargar el editor aquí: http://www.sqldeveloper.net/database-tools/mysql/overview.html

Una vez que realizamos la conexión a nuestra instancia de base de datos,  crearemos un nuevo archivo SQL en nuestro programa Dream Coder, en cualquier otro editor solo tendrás que realizar la operación de “Nueva consulta” o “Nuevo Script”. Hecho lo anterior colocaremos como línea de encabezado la instrucción:

DROP PROCEDURE IF EXISTS SP_DAMENOMBREUSUARIO;

Lo que hace la sentencia anterior es que si existe un procedimiento almacenado con el nombre “SP_DAMENOMBREUSUARIO” lo elimina evitando con ello que al ejecutar nuestro script nos aparezca el error: “Procedure  SP_DAMENOMBREUSUARIO already exists” . Como podemos ver esta es una sentencia DML común en el lenguaje SQL. Lo que sigue es la declaración de encabezado de nuestro procedimiento almacenado así como la lista de parámetros de entrada, que como establece la documentación debe ser “CREATE PROCEDURE sp_name ([parameter[,…]])”  Entonces ahora escribiremos la siguiente instrucción:

CREATE PROCEDURE SP_DAMENOMBREUSUARIO 
       (
         USERNAME VARCHAR(10) -- PARÁMETRO DE ENTRADA 
       )

Y luego como cuerpo del procedimiento colocaremos el siguiente código:

Begin

   Select *
     from (
            select 'usu1' usuario, 'nombre1' Nombre, 'paterno1' Paterno, 'materno1' Materno
            union
            select 'usu2' usuario, 'nombre2' Nombre, 'paterno2' Paterno, 'materno2' Materno
            union
            select 'usu3' usuario, 'nombre3' Nombre, 'paterno3' Paterno, 'materno3' Materno
            union
            select 'usu4' usuario, 'nombre4' Nombre, 'paterno4' Paterno, 'materno4' Materno
           ) As usuarios
     where usuario = USERNAME;

End;

y con ello tendremos creado nuestro procedimiento almacenado. Y para ejecutarlo desde nuestro editor solo escribiremos lo siguiente:

Call DAMENOMBREUSUARIO('usu1');

Como pueden ver, crear procedimientos es muy sencillo y aporta grandes beneficios a sus sistemas.

Cualquier duda pueden postear en el foro de delphi access o comentarios aquí mismo.

 

6 Comments

  1. Buenos dias, ante todo te agradezco por tu excelente aporte y a la vez quisiera hacerte una consulta tengo un codigo con la misma sintaxis que el tuyo y al ejecutarlo en el sql funciona bien pero cuando lo quiero llamar en un formulario ya no me funciona, el codigo es este:
    DELIMITER $$
    CREATE DEFINER=`root`@`localhost` PROCEDURE `LISTAR_CLIENTE_X_CODIGO`(
    Criterio varchar(7))
    BEGIN
    SELECT cod_cliente,nom_cliente, tdo_cliente, doc_cliente, rep_cliente, tel_cliente, cre_cliente, est_cliente FROM clientes WHERE cod_cliente = Criterio;
    END$$
    a que se puede deber. Gracias

  2. Buenas,quisiera saber como guardo el SP para ponder llamarlo en mi script *.pl
    como una consulta con el CALL,pq si lo guardo como un *.sql no se como llamarlo.Ha el SP que quiero hacer lleva dos parametros y no se como pasarselos.Gracias de antemano.

1 Trackback / Pingback

  1. » DB2 – Procedimientos almacenados que devuelven recordsets

Deja un comentario