Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwendung von select into local variable und der vorbereiteten Anweisung in mysql

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

Also können wir nicht:

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

Wir können ? nicht verwenden statt Bezeichner (Variablenname).

Und wenn Sie den Parameternamen verwenden:

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

in der vorbereiteten Zeichenfolge, dann weiß der Server einfach nicht, was dieser rid ist bezieht sich auf eine Aussage, die Sie vorzubereiten versuchen. Sie können versuchen, es außerhalb von SP vorzubereiten, mit dem gleichen Ergebnis:

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

Also habe ich einfach eine Benutzervariable verwendet, siehe unten:

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