|
|
|
| Всем привет. Уже 2 часа сижу не могу понять, что не так с курсором.
Вот текст процедуры
DROP PROCEDURE IF EXISTS `urbanus_banner_stats`;;
CREATE PROCEDURE `urbanus_banner_stats`(IN id_banner INT)
COMMENT 'work with banners stats'
BEGIN
DECLARE idm INT;
DECLARE is_end INT DEFAULT 0;
DECLARE dt DATE;
DECLARE obj VARCHAR(20);
DECLARE ban CURSOR FOR
SELECT `idm`,`dt`,`obj`
FROM adm_stats
WHERE `obj`='banners' AND `dt`=DATE_FORMAT(NOW(),'%Y-%m-%d') AND id=id_banner;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET is_end = 1;
OPEN ban;
bs: LOOP
FETCH ban INTO idm, dt, obj;
IF is_end = 1 THEN
IF (idm IS NULL) THEN
INSERT INTO `adm_stats` SET `id`=id_banner, `obj`='banners', `dt`=DATE_FORMAT(NOW(),'%Y-%m-%d'), `shows`=1;
ELSE
UPDATE `adm_stats` SET `shows`=`shows`+1 WHERE `obj`=obj AND `dt`=dt AND `id`=id_banner AND `idm`=idm;
END IF;
LEAVE bs;
END IF;
END LOOP bs;
CLOSE ban;
UPDATE `banners` SET `kol`=`kol`+1 WHERE `id`=id_banner;
END
|
сама процедура работает, но данные которые должны идти с курсора NULL (поле idm и др).
Кто знает чего он так себя ведет? | |
|
|