mysql - 具有局部变量的动态 MySQL

标签 mysql dynamic prepared-statement session-variables local-variables

如何在不使用 session 变量的情况下在 MySQL 数据库中使用动态 SQL 语句?

现在我有这样一段代码(在MySQL存储过程中):

(...)
DECLARE TableName VARCHAR(32);
SET @SelectedId = NULL;
SET @s := CONCAT("SELECT Id INTO @SelectedId FROM ", TableName, " WHERE param=val LIMIT 1");
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF ISNULL(@SelectedId) THEN 
(...)

但我只想使用局部变量,这意味着我想开始这个过程:

DECLARE TableName VARCHAR(32);
DECLARE s VARCHAR(1024);
DECLARE SelectedId INTEGER UNSIGNED;
(...)

并且不要在任何地方使用@char。有什么办法吗?

最佳答案

抱歉,MySQL 中的准备语句是 session 全局的。根据http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html ,“准备好的声明对于 session 也是全局的。”

而且在 MySQL 5.x 中没有其他方式(除了准备好的语句)来执行动态 SQL。

因此,您当然可以替换上面的“@s”,但据我所知,您只能使用@SelectedId。

在 MySQL 6.x 中,计划添加一个“EXECUTE IMMEDIATE”语句来执行动态 SQL。参见 http://forge.mysql.com/worklog/task.php?id=2793 .

关于mysql - 具有局部变量的动态 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1471570/

相关文章:

php - 在 mysql 表上迭代循环的最佳方法是什么

mysql - 每天SQL峰值

PHP 目录的经验法则?

c# - 在 C# 中构建动态 linq 查询的最佳方法?

php - 如果使用准备好的 PHP/MySQL 查询,我是否需要清理输入?

java - 选择查询中的 JDBCPreparedStatement 和参数 (?)

php - 在 mysql/php 中连接两个查询

php - 从表中的数据创建 PHP 变量

iphone - iOS 动态表 - 将数据分类为行和部分

mysql - 使用准备好的语句从多列进行 SQL 查询