它不起作用。 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$$
答案 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$$