DELIMITER $$USE 'dzhst2'$$DROP PROCEDURE IF EXISTS `test_mwl`$$CREATE PROCEDURE `test_mwl`()
BEGIN
DECLARE flag INT DEFAULT 0;
DECLARE v_co VARCHAR(32);
DECLARE v_c10 MEDIUMTEXT;
DECLARE objs LONGTEXT;
-- 定义游标
DECLARE myCursor CURSOR FOR
(SELECT DISTINCT co,c10 FROM ST22059_main WHERE c10 IS NOT NULL);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1;
-- 创建临时表
DROP TABLE IF EXISTS tmp_table;   
CREATE TEMPORARY TABLE tmp_table(
tmp_co VARCHAR(32),
tmp_c10 MEDIUMTEXT
)ENGINE=MEMORY;
-- 打开游标
OPEN myCursor;
-- 将游标指定的数据赋值给变量
FETCH myCursor INTO v_co,v_c10;
REPEAT
IF NOT flag THEN 
INSERT INTO tmp_table(tmp_co,tmp_c10) VALUES(v_co,v_c10);
END IF;
UNTIL flag
END REPEAT;
-- 关闭游标
CLOSE myCursor; 
-- 查询临时表
SET objs='SELECT DISTINCT tmp_co,tmp_c10 FROM tmp_table';
SET @sql_txt = objs;
PREPARE stmt FROM @sql_txt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 清空临时表
TRUNCATE tmp_table;
END$$DELIMITER ;
调用这个存储过程,程序为什么会死掉?
帮忙看一下

解决方案 »

  1.   

    REPEAT
    IF NOT flag THEN 
        INSERT INTO tmp_table(tmp_co,tmp_c10) VALUES(v_co,v_c10);
    END IF;
    UNTIL flag这个是死循环 ,结束条件是什么
      

  2.   

    UNTIL flag 不是结束条件吗?
      

  3.   

    flag一直是0吧  什么时候跳出repeat呢
      

  4.   

    'DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1;'
    这句话不是 当没有数据的时候 flag=1 了吗,这时候不就停止循环了吗?还是不明白,能不能帮忙改一下