De http://bugs.mysql.com/bug.php?id=15263 :
Então, não podemos fazer:
PREPARE stmt FROM 'SELECT id INTO ? FROM t1';
Não podemos usar
?
em vez de identificador (nome da variável). E quando você usa o nome do parâmetro:
PREPARE stmt FROM 'SELECT id INTO rid FROM t1';
na string que está sendo preparada, o servidor simplesmente não sabe o que
rid
refere-se na declaração que você está tentando preparar. Você pode tentar prepará-lo fora de SP com o mesmo resultado:mysql> prepare stmt from 'select id into p from t1';
ERROR 1327 (42000): Undeclared variable: p
Então eu apenas usei a variável do usuário, veja abaixo:
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$$