考虑这个问题。
SELECT app_label || '_' || model as name from django_content_type where id = 12;
name
-------------------
merc_benz
DJango人可能已经猜到了,'merc_benz'是同一个数据库中的表名。我想编写一些SQL迁移,我需要从这些动态表名中选择结果。
如何使用变量 name 作为表名?
答案 0 :(得分: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,或者如果你正在使用表的所有列,那么它就变得有点复杂了表名。您还可以指定多个OUT参数。
答案 1 :(得分:0)
http://www.postgresql.org/docs/8.1/static/ecpg-dynamic.html
我认为基本答案是EXECUTE IMMEDIATE