2010-07-21 50 views
-1

考慮這個查詢。從動態表名中選擇

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

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

DJango人可能猜到了'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; 

,如果你想返回超過它變得有點複雜一個類型的單個列 - 要麼創建一個具有代表性的TYPE,要麼使用表的所有列,已經有該表名的TYPE。您也可以指定多個OUT參數。