考慮這個查詢。從動態表名中選擇
SELECT app_label || '_' || model as name from django_content_type where id = 12;
name
-------------------
merc_benz
DJango人可能猜到了'merc_benz'是同一個db中的表名。我想寫一些SQL遷移,我需要從這樣的動態表名中選擇結果。
如何使用變量名稱作爲表名?
考慮這個查詢。從動態表名中選擇
SELECT app_label || '_' || model as name from django_content_type where id = 12;
name
-------------------
merc_benz
DJango人可能猜到了'merc_benz'是同一個db中的表名。我想寫一些SQL遷移,我需要從這樣的動態表名中選擇結果。
如何使用變量名稱作爲表名?
事情是這樣的......(見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參數。
http://www.postgresql.org/docs/8.1/static/ecpg-dynamic.html
最基本的答案,我認爲是EXECUTE IMMEDIATE
嗯......不,不是你提供的鏈接,除非他用C語言編寫它的心臟。這就是C語言中的嵌入式SQL - 你必須編譯,編譯,加載等等...... – rfusca 2010-07-21 13:36:44