在mysql中使用动态SQL

mysql> set @sql_text:='select count(*) from test';
Query OK, 0 rows affected (0.00 sec)

mysql> prepare stmt from @sql_text;
Query OK, 0 rows affected (0.04 sec)
Statement prepared

mysql> execute stmt;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.19 sec)

mysql> deallocate prepare stmt;
Query OK, 0 rows affected (0.00 sec)

在存储过程中改变@sql_text的值,则可以实现动态SQL的效果了。

但要注意,能够使用prepare的SQL是有限制的:

The following SQL statements can be used in prepared statements: CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, and most SHOW statements. supported. ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE are supported as of MySQL 5.0.23. Other statements are not yet supported.