繁体   English   中英

MySQL中的动态变量名

[英]Dynamic variable names in MySQL

我需要在 MySQL 中创建一些存储函数,它的工作方式与 getter/setter 完全一样,并通过它的名称为我返回或设置变量。

例如get_variable('my_special')将返回@my_special variableset_variable('my_special', 23)将设置@my_special := 23

问题是:如何将变量名设置为字符串或在 MySQL 中获取它? like SET @{'my_special'} = 23$$var = 23 (如在 PHP 中)

更新:根据我的任务,我发现在 mysql 中是不可能的。 我想要的目的是一连串的事件:

  • 我想将带有变量的查询存储为数据库中的视图。 MySQL 拒绝使用变量存储视图,但允许使用函数。
  • 我决定创建函数来返回/设置我的变量。 但是我在查询中有大约 4 个变量 - 因此创建 4 对函数来获取/设置变量效率不高。 所以我想创建通用的 getter/setter。
  • 按名称获取/设置变量的唯一方法是运行函数内部禁止的动态查询(仅在不适合在 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 tests.eval('set @ABC = 120');
select @ABC;

来源

如果您必须在 SQL 中执行此操作,您将需要名为Prepared Statements的 MySQL 功能 尽管名称如此,但这与 JDBC、mysqli、PDO 和其他支持客户端语言的 api 提供的客户端prepare()功能不同。

为什么? SQL 不允许将数据库对象(表、列等)的名称作为绑定变量处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM