Mysql
 sql >> Database >  >> RDS >> Mysql

Usando select nella variabile locale e l'istruzione preparata in mysql

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

Quindi, non possiamo fare:

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

Non possiamo usare ? invece di identificatore (nome variabile).

E quando usi il nome del parametro:

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

nella stringa che viene preparata, il server semplicemente non sa cosa sia quel rid si riferisce nella dichiarazione che stai cercando di preparare. Puoi provare a prepararlo al di fuori di SP con lo stesso risultato:

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

Quindi ho appena usato la variabile utente, vedi sotto:

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