与局部变量动态的MySQL(Dynamic MySQL with local variables)

2019-07-19 07:58发布

如何使用动态SQL语句在MySQL数据库和不使用会话变量?

现在我有这样的代码(在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;
(...)

并且不使用的@字符的任何地方。 有没有办法做到这一点?

Answer 1:

对不起,在MySQL准备的陈述会议,全球性的。 据http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html ,“一份声明中也是全局性的会议。”

而且也没有其他办法(除了准备好的发言)在MySQL 5.x中执行动态SQL

所以,你当然可以代替上述“@s”,但据我所知你坚持@SelectedId。

在MySQL 6.x的,有计划的一个特点,这将增加,这将执行动态SQL的“执行立竿见影”的语句。 见http://forge.mysql.com/worklog/task.php?id=2793 。



文章来源: Dynamic MySQL with local variables