与局部变量动态的MySQL
-
16-09-2019 - |
题
如何使用动态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; (...)
和不使用的@字符的任何地方。有没有办法做到这一点?
解决方案
对不起,在MySQL准备语句是会话全局。根据 HTTP://dev.mysql。 COM / DOC / refman / 5.1 / EN / SQL的语法准备-statements.html , “已准备语句也是全局性的会议。”
而且也没有其他办法(除了准备好的发言)在MySQL 5.x中执行动态SQL
所以,你当然可以代替上述“@s”,但据我所知你坚持@SelectedId。
在MySQL 6.x的,有计划的一个特点,这将增加,这将执行动态SQL的“执行立竿见影”的语句。请参见 http://forge.mysql.com/worklog/task.php?id = 2793 。
不隶属于 StackOverflow