MySQL中的动态变量名称

MySQL中的动态变量名称

本文介绍了MySQL中的动态变量名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在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中的动态变量名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-12 15:37