处理mysql过程中的未知线程

时间:2013-07-01 19:38:05

标签: mysql

我有一个程序可以杀死正在进行的进程,但是循环继续运行而我没有得到结果。循环继续运行。

DELIMITER $$
CREATE PROCEDURE `uKillSleepingSessions`(v_time INT )
BEGIN

DECLARE no_more_rows INT DEFAULT 0;
DECLARE loop_cntr INT DEFAULT 0;
DECLARE num_rows INT DEFAULT 0;
DECLARE V_ID bigint(4);
DECLARE v_time INT;

DECLARE my_cur CURSOR FOR
SELECT ID
FROM information_schema.PROCESSLIST PL
WHERE PL.COMMAND='Sleep' AND DB='test'
AND PL.TIME = v_time ;

DECLARE CONTINUE HANDLER FOR 1329
SET no_more_rows = 1;
OPEN my_cur;
SET num_rows = FOUND_ROWS();

IF
num_rows > 0 THEN

FETCH my_cur
INTO V_ID;
END IF;
the_loop: LOOP
IF no_more_rows = 1 THEN  
CLOSE my_cur;
LEAVE the_loop;
END IF;
IF
num_rows > 0 THEN
SET @sql= CONCAT("KILL ",V_ID);
PREPARE s1 FROM @sql;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END IF;
SET loop_cntr = loop_cntr + 1;
END LOOP the_loop;
END

请建议我哪里错了。我该如何修改它。     可以修改proc以处理未知线程。     感谢

1 个答案:

答案 0 :(得分:0)

基本上游标在select语句中获取所有ID,但有时在处理ID时它可能不存在,所以当执行prepare语句中的sql语句时,丢失的ID将不存在,因此它会抛出未知线程。没有手册可以处理这个问题。如果有人知道,请提示。