2014-02-25 102 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 ;