转换为PostgreSQL动态查询

时间:2013-06-05 12:55:55

标签: sql postgresql

下面是一个有一个查询的函数,

现在我要转换为动态查询。我想要一个表名参数,以便从多个表中查询返回数据。

请帮助我,我是PostgreSQL的新手,提前致谢!

create or replace function GetEmployees() 
returns setof weather as 
'select * from weather;' 
language 'sql';

1 个答案:

答案 0 :(得分:2)

这是基本的PL / PgSQL。将PL / PgSQL的EXECUTE .. USING statementformat函数与%I格式说明符一起使用。

create or replace function get_sometable(tablename regclass) 
returns setof whatever_type as 
BEGIN
RETURN QUERY EXECUTE format('select * from %I";', tablename);
END;
language 'plpgsql';

这只有在您传递的所有表名返回兼容结果类型时才有效,就像分区一样。否则,您必须返回SETOF RECORD,然后在函数调用中传递表布局。有关RECORDSETOF RECORD

的讨论,请参阅文档

查看RETURNS TABLE作为另一种方便的替代方法,当表格类型不兼容但你仍然可以通过合适的SELECT列表返回兼容的子集。

如果您正在进行表分区,那么您应该使用表继承和触发器来实现as the PostgreSQL documentation on table partitioning advises

(阐述Convert SQL Server stored procedure into PostgreSQL stored procedure