Procedimientos almacenados en MySQL

Aun no soy lo suficientemente experimentado con MySQL. Pero teniendo desarrollada una aplicación ASP.NET con SQL Server, me vi en la necesidad de integrar una base de datos MySQL.
Estando acostumbrado a los procedimientos almacenados en SQL Server, quise hacer lo mismo con MySQL, lo cual me resultó muy difícil al principio; pero una vez leído algo de material en Internet, lo he conseguido.

Dependiendo de la tarea que se desee realizar, será la estructura del procedimiento almacenado. Aunque el armazón siempre será igual, aquí les pongo la estructura general:

/*Para eliminarlo si ya existe*/
DROP PROCEDURE IF EXISTS ´proc_NombreProcedimiento´;
/*Crearlo*/
create  procedure ´proc_NombreProcedimiento´
(
 parametro int
)
BEGIN
 
 /*Instrucciones*/

END

En caso de no llevar parámetros, solo dejamos los paréntesis vacíos

Acerca de las instrucciones, es simple, si deseamos insertar datos en una tabla, sería mas o menos así:
/*Para eliminarlo si ya existe*/
DROP PROCEDURE IF EXISTS ´proc_InsertarJur´;
/*Crearlo*/
create  procedure ´proc_InsertarJur´
(
 pIdJuris int,
 pJuris varchar(50),
 pIdRegion int,
 pGrupo varchar(50)
)
BEGIN
 
 /*Insertar un valor*/
 insert into juris(idjuris,juris,idregion,grupo)
 values(pIdJuris,pJuris,pIdRegion,pGrupo);

END

Es muy importante respetar los puntos y coma. Muchos errores podrían no detectarse solo por la sintaxis del punto y coma.

Si deseamos hacer una búsqueda, sería mas o menos así:

/*Para eliminarlo si ya existe*/
DROP PROCEDURE IF EXISTS ´proc_BuscarJur´;
/*Crearlo*/
create  procedure ´proc_BuscarJur´
(
 pJuris varchar(50)
)
BEGIN
 
 /*Declaraciones*/
 declare sql_stat varchar(1700);
 declare sql_jur varchar(1500) ;
 declare sql_order varchar(1000);

 /*Instrucción SQL principal*/
 set sql_stat = 
  '
   select * from juris where idjuris <> 0
  ';
 
 /*Jurisdiccion*/
 IF (pJuris <> '') THEN
  set sql_jur = concat(' and juris like ', '''%', pJuris, '%''');
 ELSE
  set sql_jur ='';
 end if;

 /*Ordenar*/
 set sql_order = ' order by juris '; 

 set @sql_end = concat(sql_stat, sql_jur) ;

 set @sql_end = concat(@sql_end , sql_order);

 
 /*Ejecutar SQL*/
 PREPARE stmt1 FROM @sql_end; 
 EXECUTE stmt1; 

END

Nota: Este ejemplo de búsqueda es dinámico. Creo que es mas útil que un ejemplo de búsqueda simple.

Espero que esta publicación les haya dado ideas para procedimientos almacenados mas sofisticados.

Gracias

No hay comentarios:

Publicar un comentario