DELIMITER $$
CREATE PROCEDURE wheelSta()
BEGIN
    DECLARE inexp,income,taks,c_count,t_taks, e,c INT;
    DECLARE b INT DEFAULT 0;    /*是否达到记录的末尾控制变量*/
    DECLARE day_1,day_2 DATE;   
    DECLARE cur_1 CURSOR FOR SELECT COUNT,creat_time,taks FROM `cn_members_log` WHERE taks = 12 AND DATE(creat_time) = DATE_SUB(CURDATE(),INTERVAL 1 DAY);
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
    OPEN cur_1;
    FETCH cur_1 INTO c_count, day_1, t_taks; /*获取第一条记录*/
    WHILE b=0 DO            
        INSERT INTO cn_members_sta(inexp,TIME,taks)  VALUES(c_count, day_1, t_taks);
        FETCH cur_1 INTO c_count, day_1, t_taks; /*取下一条记录*/
    END WHILE;
    CLOSE cur_1;        
END$$
DELIMITER ;通过SELECT COUNT,creat_time,taks FROM `cn_members_log` WHERE taks = 12 AND DATE(creat_time) = DATE_SUB(CURDATE(),INTERVAL 1 DAY);这句可以查出4条记录,但是执行后在cn_members_sta表中却一条数据都没有,求解~

解决方案 »

  1.   

    好像少一个 commit 关键 ! 在 循环结束后,加上试试看!
      

  2.   

     mysql不需要commit的吧
      

  3.   

    感觉使用repeat遍历游标比较好,WHILE 执行单纯批量插入比较方便 ,建议修改成这样,脚本如下:
    CREATE PROCEDURE wheelSta()
    BEGIN
        DECLARE inexp,income,taks,c_count,t_taks, e,c INT;
        DECLARE b INT DEFAULT 0;    /*是否达到记录的末尾控制变量*/
        DECLARE day_1,day_2 DATE;   
        DECLARE cur_1 CURSOR FOR SELECT COUNT,creat_time,taks FROM `cn_members_log` WHERE taks = 12 AND DATE(creat_time) = DATE_SUB(CURDATE(),INTERVAL 1 DAY);
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
        OPEN cur_1;
        FETCH cur_1 INTO c_count, day_1, t_taks; /*获取第一条记录*/
    repeat
    FETCH cur1 INTO ps_lsjlid, ps_ywid, ps_fwsj, ps_fwjssj, ps_ckid;
    if not b then
     INSERT INTO cn_members_sta(inexp,TIME,taks)  VALUES(c_count, day_1, t_taks);
     until b end
    REPEAT;
      CLOSE cur1;
    commit;
    END$$
      

  4.   

    还是不行。。   DECLARE cur_1 CURSOR FOR SELECT COUNT,creat_time,taks FROM `cn_members_log` WHERE taks = 12 AND DATE(creat_time) = DATE_SUB(CURDATE(),INTERVAL 1 DAY); 是不是定义游标的时候 不能带where后面的啊  去掉 WHERE taks = 12 AND DATE(creat_time) = DATE_SUB(CURDATE(),INTERVAL 1 DAY); 就可以正常插入数据了 ,但是我希望插入的数据符合where后面的条件啊~
      

  5.   

    和 where 条件无关,你可试试 我的脚本 ,打印每次从游标中取到的数据使用 select  c_count, day_1, t_taks 来打印? 建议使用  dbForge Studio for MySQL 工具进行调试一下!