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

Execute várias consultas separadas por ponto e vírgula usando a instrução preparada do mysql


Não, não é possível. PREPARE / EXECUTE stmt pode executar apenas uma consulta por vez, muitas instruções não podem ser combinadas.
Consulte a documentação:http://dev.mysql. com/doc/refman/5.0/en/prepare.html

De qualquer forma, para simplificar seu código eu criaria um procedimento simples:
CREATE PROCEDURE exec_qry( p_sql varchar(100))
BEGIN
  SET @tquery = p_sql;
  PREPARE stmt FROM @tquery;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END 
/

e eu chamaria esse procedimento no procedimento principal, desta forma:
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');

Dê uma olhada em uma demonstração:http://www.sqlfiddle.com/#! 2/6649a/6