我有几个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$$
请帮忙。谢谢!
经过一些研究,显然存储函数在这种情况下将不起作用,因为存储函数无法执行动态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 ;