2014-02-25 44 views
0

我有几个MySQL表维护记录的树结构。每个记录都有一个ID和一个父字段。我想写一个存储函数获得父ID,给定一个记录ID。变量表名称MySQL存储函数

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

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

可能相关:http://stackoverflow.com/questions/6593078/mysql-stored-functions-dynamic-variable-table-column-names?rq=1 –

+0

我想试试感谢 – Jeff

+1

多个表具有相同的结构是一个坏主意。您应该将它们存储在一个表中,并在其中添加一个指定“表名”的列。 –

回答

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 ;