2014-02-25 5 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

여러 테이블 같은 구조를 가진 것은 나쁜 생각입니다. "tablename"을 지정하는 추가 열이있는 하나의 테이블에 이들을 저장해야합니다. –

답변

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 ;