Không, no không thể. PREPARE / EXECUTE stmt
chỉ có thể thực hiện một truy vấn tại một thời điểm, nhiều câu lệnh không thể kết hợp với nhau.
Xem tài liệu: http://dev.mysql. com / doc / refman / 5.0 / vi / standard.html
Dù sao, để đơn giản hóa mã của bạn, tôi sẽ tạo một thủ tục đơn giản:
CREATE PROCEDURE exec_qry( p_sql varchar(100))
BEGIN
SET @tquery = p_sql;
PREPARE stmt FROM @tquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
/
và tôi sẽ gọi thủ tục này trong thủ tục chính, theo cách này:
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');
Hãy xem bản trình diễn: http://www.sqlfiddle.com/#! 2 / 6649a / 6