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

Exécuter plusieurs requêtes séparées par des points-virgules à l'aide de l'instruction préparée mysql

Non ce n'est pas possible. PREPARE / EXECUTE stmt peut exécuter une seule requête à la fois, plusieurs instructions ne peuvent pas être combinées.
Voir documentation :http://dev.mysql. com/doc/refman/5.0/en/prepare.html

Quoi qu'il en soit, pour simplifier votre code, je créerais une procédure simple :

CREATE PROCEDURE exec_qry( p_sql varchar(100))
BEGIN
  SET @tquery = p_sql;
  PREPARE stmt FROM @tquery;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END 
/

et j'appellerais cette procédure dans la procédure principale, de cette façon :

CALL exec_qry( 'CREATE TABLE t2 AS SELECT * FROM test');
CALL exec_qry( 'SELECT * FROM t2');
CALL exec_qry( 'SELECT count(*) FROM t2');
CALL exec_qry( 'SELECT avg(x) FROM t2');
CALL exec_qry( 'DROP TABLE t2');

Jetez un œil à une démo :http://www.sqlfiddle.com/# ! 2/6649a/6