我想用一个存储过程为启动任务的入口,动态的从任务表中取出需要执行的存储过程,但老是失败。哪个高手帮忙下怎么实现好!报错如下:
[Err] 1444 - The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner
附存储过程创建代码:CREATE PROCEDURE p_crontab (
IN v_date date
)
BEGIN DECLARE v_id int default 0;
DECLARE v_func_name varchar(100);
DECLARE done int default 0;
DECLARE errinfo varchar(250);
DECLARE cur1 CURSOR FOR SELECT id,func_name FROM dyol_crontab WHERE allow=1 AND display=1 AND finish=0 AND work_date=v_date ORDER BY pri desc; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
DECLARE CONTINUE HANDLER FOR SQLWARNING SET errinfo='WARNING';
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET errinfo='EXCEPTION'; UPDATE dyol_crontab SET finish=0,work_date=v_date where allow=1 AND display=1 AND (work_date is null or work_date<>v_date);

SET @in_date = v_date; OPEN cur1;
REPEAT
FETCH cur1 INTO v_id, v_func_name;
IF NOT done THEN
SET errinfo = '';
UPDATE dyol_crontab SET begin_time=curtime() where id=v_id;
SET @func_sql = concat('call ', v_func_name, '( ? )');
prepare stmt from @func_sql;
EXECUTE stmt USING @in_date;
deallocate prepare stmt;
IF errinfo = '' THEN
UPDATE dyol_crontab SET end_time=curtime(),finish=1 where id=v_id;
ELSE
UPDATE dyol_crontab SET end_time=curtime(),status=errinfo where id=v_id;
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;END
;