miércoles, 3 de junio de 2009

Stored Procedure en MySQL

Ejemplo de como crear un Stored Procedure en MySQL

DROP PROCEDURE IF EXISTS trafico.datos_calculo_circuitos_corresp;

delimiter '/';
CREATE PROCEDURE trafico.datos_calculo_circuitos_corresp(valor varchar(20))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE val_corresponsal VARCHAR(6);
DECLARE val_minutos INT;

DECLARE cur1 CURSOR FOR SELECT b.corresponsal, sum(a.minutos) AS Minutos FROM trafico.rutas b INNER JOIN trafico.trafico a ON a.ruta = b.ruta WHERE substring(a.fecha,1,4) = valor AND b.habilitada = TRUE GROUP BY b.corresponsal;

DROP TABLE IF EXISTS tmp_set;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_set (corresponsal varchar(6), minutos int);

OPEN cur1;
IF (Select FOUND_ROWS()>0) THEN
dependency_loop: LOOP
FETCH cur1 INTO val_corresponsal, val_minutos;
IF NOT done THEN
INSERT INTO tmp_set (corresponsal, minutos) values (val_corresponsal, val_minutos);
ELSE
LEAVE dependency_loop;
END IF;
END LOOP dependency_loop;
END IF;
CLOSE cur1;

SELECT * FROM tmp_set;
END/
delimiter ';'/

Para invocar al procedimiento hacer:
call
trafico.datos_calculo_circuitos_corresp('algo');


Nota: Para poder crear el stored procedure/función es necesario redefinir el delimitador de fin de linea que tiene por defecto MySQL para evitar que corte la definición por la mitad. Por eso se utiliza el comando delimeter y se termina el script asignando nuevamente el caracter de fin de linea abitual.

No hay comentarios:

Mis fotos en TrekEarth