С http://bugs.mysql.com/bug.php?id=15263:
"Маркеры параметров можно использовать только там, где должны отображаться значения данных, но не для ключевых слов, идентификаторов и т. Д."
Итак, мы не можем сделать:
ПОДГОТОВИТЬ stmt ОТ ВЫБРАТЬ id В?ОТ t1 ';
Мы не можем использовать?вместо идентификатора (имя переменной).
И когда вы используете имя параметра:
ПОДГОТОВИТЬ stmt FROM 'SELECT id INTO rid FROM t1';
в подготовленной строкетогда сервер просто не знает, на что ссылается этот избавитель в заявлении, которое вы пытаетесь подготовить.Вы можете попытаться подготовить его вне SP с тем же результатом:
mysql> prepare stmt из 'select id to p from t1';ОШИБКА 1327 (42000): необъявленная переменная: 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$$