【问题标题】:Function returning all columns from more than one table (PostgreSQL)从多个表返回所有列的函数(PostgreSQL)
【发布时间】:2014-12-15 07:42:14
【问题描述】:

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

【问题讨论】:

  • 从 CREATE TABLE 语句复制列名有点长。不过,这并不复杂。
  • 您可以创建一个复合类型(或使用RETURNS TABLE),其中具有复合类型作为字段。访问表列会更长,但您不必复制列(及其类型)+ 原始表结构中的更改将立即反映 + 重复的列名是允许这种方式。跨度>

标签: function postgresql join return multiple-tables


【解决方案1】:

没有专门的功能。

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

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

或者你创建一个TYPE 并使用RETURNS SETOF ..

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

...
RETURNS SETOF mytype
...

【讨论】:

    【解决方案2】:

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

    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,因此如果不先删除该函数,则以后无法对视图进行结构修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 2020-08-03
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 2010-10-19
      相关资源
      最近更新 更多