Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation de select dans la variable locale et l'instruction préparée dans mysql

Depuis http://bugs.mysql.com/bug.php?id=15263 :

Donc, on ne peut pas faire :

PREPARE stmt FROM 'SELECT id INTO ? FROM t1';

Nous ne pouvons pas utiliser ? au lieu d'identifiant (nom de variable).

Et lorsque vous utilisez le nom du paramètre :

PREPARE stmt FROM 'SELECT id INTO rid FROM t1';

dans la chaîne en cours de préparation, le serveur ne sait tout simplement pas ce que rid fait référence dans la déclaration que vous essayez de préparer. Vous pouvez essayer de le préparer en dehors de SP avec le même résultat :

mysql> prepare stmt from 'select id into p from t1';
ERROR 1327 (42000): Undeclared variable: p

Donc j'ai juste utilisé la variable utilisateur, voir ci-dessous :

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