开发者

Select from dynamic table names

Consider this query.

SELECT app_label || '_' || mo开发者_如何学JAVAdel as name from django_content_type where id = 12;

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

DJango people might have guessed, 'merc_benz' is a table name in same db. I want to write some SQL migrations and I need to select results from such dynamic table names.

How can i use variable name as a table name???


Something like this...(see 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;

It becomes a little more complex if you want to return more than a single column of one type - either create a TYPE that is representative, or if you're using all the columns of a table, there's already a TYPE of that table name. You could also specify multiple OUT parameters.


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

The basic answer I think is EXECUTE IMMEDIATE

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜