GBase 8c
其他
文章

GBase 8c 表函数(二)

发表于2023-12-07 14:48:4717次浏览1个评论

有时侯,定义一个能够根据它们被调用方式返回不同列集合的表函数是很有用的。为了支持这些,表函数可以被声明为返回伪类型record。 如果在查询里使用这样的函数,那么我们必须在查询中指定所预期的行结构,这样系统才知道如何分析和规划该查询。这种语法是这样的:

function_call [AS] alias (column_definition [, ... ])

function_call AS [alias] (column_definition [, ... ])

ROWS FROM( ... function_call AS (column_definition [, ... ]) [, ... ] )

在没有使用ROWS FROM()语法时, column_definition列表会取代无法附着在 FROM项上的列别名列表,列定义中的名称就起到列别名的作用。 在使用ROWS FROM()语法时, 可以为每一个成员函数单独附着一个 column_definition列表;或者在只有一个成员 函数并且没有WITH ORDINALITY子句的情况下,可以在 ROWS FROM()后面写一个 column_definition列表来取代一个列别名列表。

考虑下面的例子:

SELECT *

    FROM dblink('dbname=mydb', 'SELECT proname, prosrc FROM pg_proc')

      AS t1(proname name, prosrc text)

    WHERE proname LIKE 'bytea%';

dblink函数(dblink模块的一部分)执行一个远程的查询。它被声明为返回record,因为它可能会被用于任何类型的查询。

评论

登录后才可以发表评论
崔哥发表于 4个月前
春日游,杏花吹满头。陌上谁家年少足风流?妾拟将身嫁与一生休。纵被无情弃,不能羞。