函数返回多个表中的所有列(PostgreSQL)

时间:2014-10-20 10:43:57

标签: function postgresql join return multiple-tables

我想创建一个函数来返回所有列,比如说在函数查询中加入的2个表。如果那只是一个表,我可以简单地使用表的名称来定义返回类型。对于更多的表,我知道的唯一方法就是分别定义每一列,当我在表中有很多列时会变得有点复杂。有没有办法做到这一点更简单?

2 个答案:

答案 0 :(得分:1)

您可以创建一个视图并将其用作类型:

CREATE VIEW viewname AS select * from table1, table2, table3;

然后这个函数声明将起作用:

CREATE FUNCTION multiple_tables(...) RETURNS SETOF viewname AS
$$
  return select * from table1 join table2 on (...) join table3 on (...) WHERE ...;
$$ language sql;

RETURNS viewname没有SETOF也是可能的。

该函数将取决于viewname,因此在不先删除函数的情况下,以后不能对结构进行结构修改。

答案 1 :(得分:0)

没有专门的功能。

您可以列出RETURNS TABLE子句中的所有列:

CREATE FUNCTION
...
RETURNS TABLE (col1 type1, col2 type2, ...)
...

或者您创建了TYPE并使用RETURNS SETOF ..

CREATE TAPE mytype (col1 type1, col2 type2, ...);

...
RETURNS SETOF mytype
...