2016-12-01 43 views
0

它不起作用。 CURSOR參數未知。 在這種情況下我們如何使用參數?非常感謝mysql如何在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

其實我們並不需要使用參數輸入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$$