我有几个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$$
请帮忙。谢谢!
答案 0 :(得分: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 ;