首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL存储过程中使用动态SQL

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

Stack Overflow用户
提问于 2008-10-10 10:43:33
回答 3查看 137.3K关注 0票数 69

如何在MySQL存储过程中构建和使用动态sql?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-10 11:56:48

我不相信MySQL支持动态sql。您可以使用类似但不同的“准备好的”语句。

下面是一个示例:

代码语言:javascript
复制
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;

准备好的语句通常用于查看给定查询的执行计划。由于它们是使用Since 命令执行的,并且可以将sql赋值给一个变量,因此您可以近似于一些与动态相同的行为。

关于这一点,这里有一个很好的link

不要忘了使用最后一行释放stmt

祝好运!

票数 56
EN

Stack Overflow用户

发布于 2011-04-20 17:25:54

5.0.13之后,在存储过程中,您可以使用动态SQL:

代码语言:javascript
复制
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在函数或触发器中不起作用。有关更多用途,请参阅the MySQL documentation

票数 119
EN

Stack Overflow用户

发布于 2015-12-16 21:43:42

您可以使用用户定义的变量在动态语句外部传递

代码语言:javascript
复制
Server version: 5.6.25-log MySQL Community Server (GPL)

mysql> PREPARE stmt FROM 'select "AAAA" into @a';
Query OK, 0 rows affected (0.01 sec)
Statement prepared

mysql> EXECUTE stmt;
Query OK, 1 row affected (0.01 sec)

DEALLOCATE prepare stmt;
Query OK, 0 rows affected (0.01 sec)

mysql> select @a;
+------+
| @a   |
+------+
|AAAA  |
+------+
1 row in set (0.01 sec)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/190776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档