下面是一个有一个查询的函数,
现在我要转换为动态查询。我想要一个表名参数,以便从多个表中查询返回数据。
请帮助我,我是PostgreSQL的新手,提前致谢!
create or replace function GetEmployees()
returns setof weather as
'select * from weather;'
language 'sql';
答案 0 :(得分:2)
这是基本的PL / PgSQL。将PL / PgSQL的EXECUTE .. USING
statement和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
列表返回兼容的子集。
如果您正在进行表分区,那么您应该使用表继承和触发器来实现as the PostgreSQL documentation on table partitioning advises。
(阐述Convert SQL Server stored procedure into PostgreSQL stored procedure)