如何在MySQL存储过程中使用动态SQL

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

如何在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;

准备好的语句通常用于查看给定查询的执行计划。因为它们是用执行命令和SQL可以分配给一个变量,可以近似于一些与动态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文档为了更多的用途。

扫码关注云+社区