Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando select em variável local e instrução preparada no mysql


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$$