0

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

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

请帮助我,我是 PostgreSQL 的新手,在此先感谢!

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

1 回答 1

2

这是基本的 PL/PgSQL。使用带有格式说明符的 PL/PgSQLEXECUTE .. USING语句format函数。%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,然后在函数调用中传递表格布局。RECORD有关 和 的讨论,请参阅文档SETOF RECORD

当表类型不兼容但您仍然可以通过合适的列表返回兼容的子集时,请考虑RETURNS TABLE作为另一种方便的选择。SELECT

如果你正在做表分区,你真的应该按照关于表分区的 PostgreSQL 文档的建议,使用表继承和触发器来做。

(详述将 SQL Server 存储过程转换为 PostgreSQL 存储过程

于 2013-06-05T13:02:51.517 回答