读书人

调用这个存储过程程序为什么会死掉?

发布时间: 2012-04-26 14:01:31 作者: rapoo

调用这个存储过程,程序为什么会死掉?

SQL code
DELIMITER $$USE 'dzhst2'$$DROP PROCEDURE IF EXISTS `test_mwl`$$CREATE PROCEDURE `test_mwl`()BEGINDECLARE 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;REPEATIF NOT flag THEN     INSERT INTO tmp_table(tmp_co,tmp_c10) VALUES(v_co,v_c10);END IF;UNTIL flagEND 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 ;


调用这个存储过程,程序为什么会死掉?
帮忙看一下

[解决办法]
REPEAT
IF NOT flag THEN
INSERT INTO tmp_table(tmp_co,tmp_c10) VALUES(v_co,v_c10);
END IF;
UNTIL flag

这个是死循环 ,结束条件是什么

[解决办法]
flag一直是0吧 什么时候跳出repeat呢
[解决办法]
还是死循环造成的,无法跳出循环的原因。

读书人网 >Mysql

热点推荐