代码之家  ›  专栏  ›  技术社区  ›  simplyharsh

从动态表名称中选择

  •  -1
  • simplyharsh  · 技术社区  · 16 年前

    考虑这个问题。

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

    DJango人可能已经猜到了,“merc\u benz”是同一个数据库中的一个表名。我想写一些SQL迁移,需要从这些动态表名中选择结果。

    如何使用变量 名称 作为表名???

    2 回复  |  直到 11 年前
        1
  •  1
  •   rfusca    16 年前

    像这样的东西…(参见 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;
    

        2
  •  0
  •   Randy    16 年前

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

    我认为最基本的答案是 EXECUTE IMMEDIATE