miércoles, 3 de junio de 2009

User Functions en MySQL

Ejemplo de User Function en MySQL, con el uso de cursores.

DROP FUNCTION IF EXISTS importacion.set_tiponodo_adsl;


delimiter '/';
CREATE FUNCTION importacion.set_tiponodo_adsl() returns varchar(20)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE val_edificio varchar(20);
DECLARE val_equipo varchar(20);
DECLARE cablepriaux VARCHAR(20);
DECLARE tiponodoaux VARCHAR(20);
DECLARE val_rangonodos VARCHAR(20);
DECLARE cur1 CURSOR FOR SELECT edificio, equipo FROM importacion.adslaux WHERE tiponodo = 'NO' OR tiponodo IS NULL;

OPEN cur1;
IF (Select FOUND_ROWS()>0) THEN
dependency_loop: LOOP
FETCH cur1 INTO val_edificio, val_equipo;
IF NOT done THEN
SET tiponodoaux = '';

SELECT tiponodo INTO val_rangonodos
FROM importacion.rangonodos
WHERE edificio = val_edificio
AND lim_inferior <>
AND lim_superior > cast(val_equipo as UNSIGNED );

IF val_rangonodos IS NULL THEN
SET tiponodoaux = 'NO';
ELSE
SET tiponodoaux = val_rangonodos;
END IF;

UPDATE importacion.adslaux
SET tiponodo = tiponodoaux
WHERE edificio = val_edificio
AND equipo = val_equipo;

ELSE
LEAVE dependency_loop;
END IF;
END LOOP dependency_loop;
END IF;
CLOSE cur1;

RETURN '';
END/
delimiter ';'/

Para invocarla simplemente hacer
SELECT importacion.set_tiponodo_adsl;

No hay comentarios:

Mis fotos en TrekEarth