zoukankan      html  css  js  c++  java
  • mysql 游标最后一行 重复问题

    BEGIN
    declare p_id INT;
    declare p_Code INT default 0;
    declare p_Logo INT default 0;
    declare p_Name varchar(255) default '';
    declare p_Address varchar(755) default '';
    declare p_Phone varchar(755) default '';
    declare p_Logo2 varchar(755) default '';
    declare p_Logo3 varchar(755) default '';
    declare p_Paid varchar(755) default '';
    declare p_IsDelete varchar(755) default '';
    declare done INT DEFAULT 0;
    declare cur CURSOR FOR SELECT ID, Code,Logo,Name,Address,Phone,Logo2,Logo3,Paid,IsDelete  FROM hospital_copy;
    declare CONTINUE HANDLER FOR NOT FOUND SET done=1;
    OPEN cur;
    REPEAT
    FETCH cur INTO p_id, p_Code,p_Logo,p_Name,p_Address,p_Phone,p_Logo2,p_Logo3,p_Paid,p_IsDelete;
    IF done=0 THEN
    INSERT INTO `hospital` (
    `ID` ,
    `Code` ,
    `Name` ,
    `Country_Code` ,
    `Phone` ,
    `Address1` ,
    `Address2` ,
    `Address3` ,
    `County` ,
    `Country` ,
    `Postcode` ,
    `Logo` ,
    `Logo2` ,
    `Logo3` ,
    `Paid` ,
    `IsDeleted`,
    `Add_time`,
    `Delete_time`,
    `timeInterval`
    )
    VALUES (
    p_id, p_Code,p_Name,'0001','13971056776',p_Address,p_Address, p_Address, p_Address, p_Address, '442200', p_Logo,p_Logo2,p_Logo3,p_Paid,p_IsDelete,'2011-1-1','','30');
    END IF;
    UNTIL done=1
    END REPEAT;
    CLOSE cur;
    END

    加深红色部分解决方法,最后的重复的原因是FETCH cur INTO ……;的时候,当第一次到达最后一条记录时,取出记录,把值给变量,这时一切正常,没有错误。然后UNTIL UNTIL done=1 循环到REPEAT重新开始,再FETCH一条时,已经没有记录,done会被 SET done=1;,但此刻没有进行任何判断,程序会继续执行INSERT INTO ……语句,而由于FETCH没有取到记录,则没有对变量进行赋值,所以变量仍是原值。当到UNTIL done 时程序退出REPEAT,从而最后的记录会被重复。 

  • 相关阅读:
    vue(5)
    vue(4)
    vue(3)-防止闪烁
    vue(2)
    bootstrap 模态框
    2017年上半年工作总结和计划
    vue(1)
    文本框数量加减功能
    meta 控制移动端页面的缩放
    题解 P1550 【[USACO08OCT]打井Watering Hole】
  • 原文地址:https://www.cnblogs.com/zbl3033/p/3958320.html
Copyright © 2011-2022 走看看