当然,您可以通过将函数调用放在FROM
子句中来做到这一点,就像 Eric Brandstetter 正确回答一样。但是,这有时会使 FROM 子句中已经包含其他内容的查询变得复杂。要获取函数返回的各个列,可以使用以下语法:
SELECT (testfunction()).*
或者只获取名为“a”的列:
SELECT (testfunction()).a
将整个函数(包括输入值)放在括号中,后跟一个点和所需的列名或星号。
要获取函数返回的列名,您必须:
- 检查源代码
- 首先检查函数的结果,如下所示:
SELECT * FROM testfunction()
。
输入值仍然可以来自FROM
子句。只是为了说明这一点,考虑这个函数和测试数据:
CREATE FUNCTION funky(a integer, b integer)
RETURNS TABLE(x double precision, y double precision) AS $$
SELECT a*random(), b*random();
$$ LANGUAGE SQL;
CREATE TABLE mytable(a integer, b integer);
INSERT INTO mytable
SELECT generate_series(1,100), generate_series(101,200);
您可以调用函数“funky(a,b)”,而无需将其放在FROM
子句中:
SELECT (funky(mytable.a, mytable.b)).*
FROM mytable;
这将导致2列:
x | y
-------------------+-------------------
0.202419687062502 | 55.417385618668
1.97231830470264 | 63.3628275180236
1.89781916560605 | 1.98870931006968
(...)