【问题标题】:Variable Table Name MySQL Stored Function变量表名 MySQL 存储函数
【发布时间】:2014-02-25 02:17:44
【问题描述】:

我有几个 MySQL 表,它们维护记录的树形结构。每条记录都有一个 ID 和一个父字段。在给定记录 ID 的情况下,我想编写一个存储函数来获取父 ID。

以下是我的第一次尝试,不正确。我的问题是我不知道如何使用变量表名。

delimiter $$

create function parent(
    tableName varchar(15),
    nodeId    int
) returns int
begin
    declare p int;
    select parent into p from tableName where id=nodeId;
    return p;
end$$

请帮忙。谢谢!

【问题讨论】:

  • 具有相同结构的多个表是个坏主意。您应该将它们存储在一个表中,并带有一个指定“表名”的附加列。
  • 确实如此,但这是用于研究绩效评估的。基本上,有几个结构相同但参数不同的表。我使用这些表来衡量我的算法的性能。
  • @Jeff 但是,一旦混合了动态 SQL,您的所有测量都将关闭
  • 怎么样?它只是一个表名的变量。

标签: mysql stored-functions


【解决方案1】:

经过一些研究,显然存储函数在这种情况下将不起作用,因为存储函数无法执行动态 SQL。我将实现更改为存储过程。

delimiter $$

create procedure parent(tableName varchar(15), nodeId int)
begin
    set @s := concat('select parent from ', tableName, ' where id =', nodeId);
    prepare query from @s;
    execute query;
    deallocate prepare query;
end$$

delimiter ;

【讨论】:

  • 那么你现在如何获得价值呢?
  • @AntonioCS 这是一个程序,它会输出sql结果。如果您只希望该值在另一个 SQL 中使用它(并且您确定您的过程提取了一个值),我已经向该过程添加了一个输出参数,然后创建了一个实际调用该过程并返回输出的函数,我不得不使用这个技巧来构建一个递归函数,它可以工作;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2015-03-26
相关资源
最近更新 更多