问题描述
我需要在MySQL中创建一些存储函数,该存储函数的工作方式将与getter/setter完全相同,并使用其名称为我返回或设置变量.
I need to create some stored function in MySQL that will work exactly like getter/setter and return or set for me variable by it's name.
例如get_variable('my_special')
将返回@my_special variable
的值,set_variable('my_special', 23)
将设置@my_special := 23
的值.
For example get_variable('my_special')
will return me value of @my_special variable
, set_variable('my_special', 23)
will set @my_special := 23
.
问题是:如何将变量名设置为字符串集或在MySQL中获取它?Smth like SET @{'my_special'} = 23
或$$var = 23
(如PHP)
Question is: how can I, having variable name as a string set or get it in MySQL?Smth like SET @{'my_special'} = 23
or $$var = 23
(as in PHP)
更新:根据我的任务,我发现在mysql中是不可能的.我想要的目的是一连串的事件:
Update: According to my task I found that it's impossible to do in mysql. The purpose I wanted this was a chain of events:
- 我想将带有变量的查询存储为DB中的视图. MySQL拒绝使用变量存储视图,但允许使用函数.
- 我已决定创建将返回/设置变量的函数.但是我在查询中有大约4个变量-因此创建4对函数来获取/设置变量效率不高.所以我想创建通用的吸气剂/吸气剂.
- 按名称获取/设置变量的唯一方法是运行函数内部禁止的动态查询(仅在不适合在select语句内部使用的过程中).
- 由于这个问题,这是不可能的.
推荐答案
create procedure `eval`( in param text )
begin
set @sql = param;
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
end
调用过程call tests.eval('set @ABC = 120')
,在当前会话中,您可以访问变量@ABC
Call the procedure call tests.eval('set @ABC = 120')
and in the current session, you can access the variable @ABC
call tests.eval('set @ABC = 120');
select @ABC;
这篇关于MySQL中的动态变量名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!