Od http://bugs.mysql.com/bug.php?id=15263 :
Więc nie możemy zrobić:
PREPARE stmt FROM 'SELECT id INTO ? FROM t1';
Nie możemy użyć ?
zamiast identyfikatora (nazwa zmiennej).
A kiedy używasz nazwy parametru:
PREPARE stmt FROM 'SELECT id INTO rid FROM t1';
w przygotowywanym ciągu, serwer po prostu nie wie, co to rid
odnosi się do oświadczenia, które próbujesz przygotować. Możesz spróbować przygotować go poza SP z takim samym skutkiem:
mysql> prepare stmt from 'select id into p from t1';
ERROR 1327 (42000): Undeclared variable: p
Więc właśnie użyłem zmiennej użytkownika, patrz poniżej:
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$$