проверьте, возвращает ли курсор что-нибудь - PullRequest
1 голос
/ 01 января 2012

Как вы можете в функции процедуры в mysql проверять, возвращает ли курсор что-нибудь?

Можно ли избежать выполнения IF (SELECT COUNT(*) FROM stock ... и вместо этого как-то проверить переменную _cur?

функция процедуры

DELIMITER $$

DROP FUNCTION IF EXISTS `stock_first_available_id` $$
CREATE DEFINER=`dynaccount`@`localhost` FUNCTION `stock_first_available_id`(_running_total_limit INT, _product_id INT, _group_id INT) RETURNS INT
BEGIN
    DECLARE _running_count INT default 0;
    DECLARE _id INT;
    DECLARE _current_id INT;
    DECLARE _sum_count INT;
    DECLARE _cur CURSOR FOR SELECT id, count FROM stock WHERE group_id=_group_id && type=2 && product_id=_product_id ORDER BY time DESC, id DESC;

    IF (SELECT COUNT(*) FROM stock WHERE group_id=_group_id && type=2 && product_id=_product_id) = 0 THEN
        RETURN 0;
    END IF;

    OPEN _cur;

    read_loop: LOOP
        FETCH _cur INTO _id, _sum_count;

        SET _running_count = _running_count + _sum_count;
        SET _current_id = _id;

        IF _running_count > _running_total_limit THEN
            LEAVE read_loop;
        END IF;
    END LOOP read_loop;

    CLOSE _cur;

    RETURN _current_id;
END $$

DELIMITER ;

1 Ответ

4 голосов
/ 01 января 2012

Добавьте обработчик продолжения к вашему курсору. См. Примеры из документации MySQL.

http://dev.mysql.com/doc/refman/5.0/en/cursors.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...