使用文本变量返回查询

时间:2014-02-24 20:15:39

标签: sql postgresql

我需要返回一些查询,我到那里,好吧,隐式文本变量。我怎么能在里面得到它的内容?因为它不明白_table_name不是文本而是varibale?

因为我收到了这样的错误

ERROR:  "_table_name" relation does not exist 
LINE 1: SELECT DISTINCT "TYPES".type_id FROM "TYPES", _table_name WH...

这是我的功能

CREATE OR REPLACE FUNCTION get_las_types(_table_num integer)

    RETURNS TABLE(_type int) AS

    $BODY$
    DECLARE
      _table_name text;

    BEGIN
        _table_name:='well_las_data_'||_table_num;

        RETURN QUERY SELECT DISTINCT "TYPES".type_id FROM "TYPES", _table_name WHERE "TYPES".type_id =  _table_name.type_id;
    END;
    $BODY$
    LANGUAGE plpgsql;

1 个答案:

答案 0 :(得分:1)

您可以使用新的format函数(9.1及更高版本)安全地构建动态查询:

return query execute format('SELECT DISTINCT "TYPES".type_id FROM "TYPES", %I WHERE "TYPES".type_id =  %I.type_id;', _table_name,_table_name);

您可以找到其他示例here