От http://bugs.mysql.com/bug.php?id=15263 :
Така че, не можем да направим:
PREPARE stmt FROM 'SELECT id INTO ? FROM t1';
Не можем да използваме ?
вместо идентификатор (име на променлива).
И когато използвате име на параметър:
PREPARE stmt FROM 'SELECT id INTO rid FROM t1';
в низа, който се подготвя, тогава сървърът просто не знае какво rid
се отнася в изявлението, което се опитвате да подготвите. Можете да опитате да го подготвите извън SP със същия резултат:
mysql> prepare stmt from 'select id into p from t1';
ERROR 1327 (42000): Undeclared variable: p
Така че току-що използвах потребителска променлива, вижте по-долу:
DROP PROCEDURE IF EXISTS `singledb`.`TOUR_TRANSFER`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `TOUR_TRANSFER`()
BEGIN
BEGIN -- for rubric table
-- DECLARE @tblRubric_rubric_id INT;
SET @tblRubric_rubric_id := 0;
SET @qry = 'SELECT count(*) into @tblRubric_rubric_id FROM zerodb2.tour_template';
PREPARE statement FROM @qry;
EXECUTE statement;
END;
END$$