El día 7 de octubre de 2009 12:15, darkx hardy <sdarknot@stripped>
escribió:
> Hola a todos bueno
> aca les adjunto todo el script
> para que tengan una idea del
> resultado que me aparece
El procedimiento queda así:
DELIMITER $$
-- ------------------------------------------------------------------------
DROP FUNCTION IF EXISTS `call_center`.`fn_purchased` $$
/*!50003 SET @TEMP_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */ $$
CREATE DEFINER=`root`@`localhost` FUNCTION `fn_purchased`(id int)
RETURNS varchar(300) CHARSET utf8
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE VRETURN varchar(30) ;
DECLARE us varchar(30);
DECLARE users varchar(300) default '';
DECLARE UAM CURSOR FOR select d.destino from deal_destinos dd
inner join destinos d on d.iddestino=dd.iddestino
where dd.iddeal=id ;
DECLARE CONTINUE HANDLER FOR not found SET done = 1;
OPEN UAM;
REPEAT
FETCH UAM INTO us;
IF NOT done THEN
set VRETURN=us;
if(users='') then set users=VRETURN;
else set users=concat(users,' - ',VRETURN);
end if;
end if;
UNTIL done END REPEAT;
CLOSE UAM;
RETURN users;
END $$
/*!50003 SET SESSION SQL_MODE=@TEMP_SQL_MODE */ $$
-- --------------------------------------------------------------------------
DELIMITER ;
> no entiendo por que ?
Como puedes ver, lo único que agregué fue un
IF NOT done THEN (...) end if;
El problema esta en que estas usando la estructura
REPEAT que recién hace la evaluación de la variable done
al FINAL.
Y deberías usar la estructura WHILE [0]
[0]http://dev.mysql.com/doc/refman/5.0/es/while-statement.html
Que evalúa la condición al COMIENZO y así evitar que se
ejecute una vez más.
Un abrazo,
--
§~^Calabaza^~§ from Villa Elisa, Paraguay
http://calablogbaza.blogspot.com/
http://es.wikipedia.org/wiki/Top-posting
http://es.wikipedia.org/wiki/Netiquette