2010-07-21 4 views
-1

이 쿼리를 고려하십시오.동적 테이블 이름에서 선택

SELECT app_label || '_' || model as name from django_content_type where id = 12; 

     name   
------------------- 
merc_benz 

장고 사람들이 짐작, 'merc_benz은'같은 DB의 테이블 이름입니다. 일부 SQL 마이그레이션을 작성하고 이러한 동적 테이블 이름에서 결과를 선택해야합니다.

어떻게 변수 이름을 테이블 이름으로 사용할 수 있습니까 ???

답변

1

뭔가 ...이다 (이 RETURN QUERY EXECUTE in the plpgsql portion of the manual)

CREATE function dynamic_table_select(v_id int) returns setof text as $$ 
DECLARE 
    v_table_name text; 
BEGIN 
    SELECT app_label || '_' || model into 
    v_table_name from django_content_type where id = v_id; 
    RETURN QUERY EXECUTE 'SELECT a_text_column from '||quote_ident(v_table_name); 
    RETURN; 
END 
$$ LANGUAGE plpgsql; 

당신이 이상을 반환 할 경우 좀 더 복잡해진다 한 유형의 단일 C 럼 - 대표적인 TYPE을 작성하거나 테이블의 모든 C 럼을 g 용하는 경우 이미 해당 테이블 이름의 TYPE이 있습니다. OUT 매개 변수를 여러 개 지정할 수도 있습니다.

0

http://www.postgresql.org/docs/8.1/static/ecpg-dynamic.html

내가 생각하는 기본적인 대답은이 같은 EXECUTE IMMEDIATE

+0

Ummm ... 아니요, 그가 C 언어로 프로그래밍 할 때 마음을 먹지 않는 한 제공 한 링크가 아닙니다. C 언어의 내장 SQL을 사용하면 컴파일,로드 등을 할 수 있습니다. – rfusca