DELIMITER $$
DROP PROCEDURE IF EXISTS Ptest;
$$
CREATE PROCEDURE Ptest()
BEGIN
DECLARE var_sql VARCHAR(1000);
DECLARE var_Where VARCHAR(1000);
DECLARE var_Limit_num VARCHAR(1000);
DECLARE var_table VARCHAR(1000) DEFAULT 'test';
DECLARE var_done INT DEFAULT FALSE;
DECLARE cur_delete_rep_full CURSOR FOR
SELECT CONCAT('delete from ',var_table,' where STATUS=',STATUS,' and bo_id=',bo_id,' limit ',COUNT(1)-1,';')
FROM test GROUP BY STATUS,bo_id HAVING COUNT(1)>1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET var_done = TRUE;
IF EXISTS (SELECT STATUS,bo_id
FROM test GROUP BY STATUS,bo_id
HAVING COUNT(1)>1) THEN
OPEN cur_delete_rep_full;
read_loop:LOOP
FETCH cur_delete_rep_full INTO var_sql;
IF var_done THEN
LEAVE read_loop;
END IF;
SET @p_sql=var_sql;
PREPARE stmt FROM @p_sql;
EXECUTE stmt;
END LOOP;
CLOSE cur_delete_rep_full;
END IF ;
END ;
$$