如何在MySQL存储过程中构建和使用动态sql?
在5.0.13之后,在存储过程中,您可以使用动态SQL:
delimiter // CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64)) BEGIN SET @s = CONCAT('SELECT ',col,' FROM ',tbl ); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; END // delimiter ;
动态SQL在函数或触发器中不起作用.有关更多用途,请参阅MySQL文档.
我不相信MySQL支持动态sql.您可以执行类似但不同的"准备"语句.
这是一个例子:
mysql> PREPARE stmt FROM -> 'select count(*) -> from information_schema.schemata -> where schema_name = ? or schema_name = ?' ; Query OK, 0 rows affected (0.00 sec) Statement prepared mysql> EXECUTE stmt -> USING @schema1,@schema2 +----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set (0.00 sec) mysql> DEALLOCATE PREPARE stmt;
准备好的语句通常用于查看给定查询的执行计划.由于它们是使用execute命令执行的,并且可以将sql分配给变量,因此可以使用与动态sql相同的行为.
这是一个很好的链接:
不要忘记stmt
使用最后一行解除分配!
祝好运!