mysql如何在CURSOR中使用参数?

时间:2016-12-01 09:40:43

标签: parameters cursor

它不起作用。 CURSOR参数未知。 在这种情况下我们如何使用参数?非常感谢

CREATE PROCEDURE proUpdateMember(inDate Date)
DETERMINISTIC
BEGIN
    DECLARE v_memberId INT;
    DECLARE dueDate, lastTwelfthDueDate date;
    DECLARE done INT DEFAULT FALSE;

    DECLARE UpdateMember(inDueDate date ,inLastTwelfthDueDate date) 
            CURSOR FOR select member_id from tableMember where
                member_due_date BETWEEN inLastTwelfthDueDate and inDueDate; 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    set dueDate = (inDate - INTERVAL 1 MONTH);
    set lastTwelfthDueDate = (dueDate - INTERVAL 12 MONTH);

    OPEN UpdateMember(dueDate,lastTwelfthDueDate); /* input parameter */
        read_loop: LOOP
        FETCH UpdateMember INTO v_memberId;
        IF done THEN LEAVE read_loop; END IF;
            select v_memberId;
        end if;
        END LOOP;
    CLOSE UpdateMember;
END$$

2 个答案:

答案 0 :(得分:0)

如果您可以选择:

MariaDB 版本10.3.0中,游标可以具有参数- 在此处https://mariadb.com/kb/en/library/cursor-overview/

中查看ggod示例

示例: CURSOR(...)

DECLARE cur CURSOR(pmin INT, pmax INT) FOR SELECT

答案 1 :(得分:-1)

实际上我们不需要使用CURSOR的参数输入。 它的工作原理如下:

CREATE PROCEDURE proUpdateMember(inDate Date)
DETERMINISTIC
BEGIN
    DECLARE v_memberId INT;
    DECLARE dueDate, lastTwelfthDueDate date;
    DECLARE done INT DEFAULT FALSE;

    DECLARE UpdateMember 
            CURSOR FOR select member_id from tableMember where
                member_due_date BETWEEN inLastTwelfthDueDate and inDueDate; 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    set dueDate = (inDate - INTERVAL 1 MONTH);
    set lastTwelfthDueDate = (dueDate - INTERVAL 12 MONTH);

    OPEN UpdateMember;
        read_loop: LOOP
        FETCH UpdateMember INTO v_memberId;
        IF done THEN LEAVE read_loop; END IF;
            select v_memberId;
        end if;
        END LOOP;
    CLOSE UpdateMember;
END$$