我有一个名为generate_table的函数,该函数需要2个输入参数(rundate::date和branch::varchar)
rundate::date
branch::varchar
现在,我尝试使用PLPGSQL处理第二个函数,该函数将获取所有分支的列表以及每个分支的最新日期,并将其作为参数传递给generate_table函数。
我的查询是这样的:
select max(rundate) as rundate, branch from t_index_of_imported_files group by branch
结果如下:
rundate;branch 2014-03-13;branch1 2014-03-12;branch2 2014-03-10;branch3 2014-03-13;branch4
我需要的是函数运行这样的内容
select generate_table('2014-03-13';'branch1'); select generate_table('2014-03-12';'branch2'); select generate_table('2014-03-10';'branch3'); select generate_table('2014-03-13';'branch4');
我已经阅读了很多有关PLPGSQL的文章,但到目前为止,我只能说我几乎不了解其基础知识。
我读到可以使用串联以将所有值放在一起,然后在函数内使用EXECUTE,但是我无法使其正常工作。
有关如何执行此操作的任何建议?
您可以使用 LATERAL JOIN Postgres 9.3+中的新增功能通过普通的SELECT查询来执行此操作
LATERAL JOIN
SELECT * FROM ( SELECT max(rundate) AS rundate, branch FROM t_index_of_imported_files GROUP BY branch ) t , generate_table(t.rundate, t.branch) g; -- LATERAL is implicit here
每个文档:
LATERAL也可以在函数调用FROM项之前添加,但在这种情况下,它是一个干扰词,因为函数表达式FROM在任何情况下都可以引用较早的项。
LATERAL
FROM
在旧版本中,可以通过扩展SELECT列表中用于返回集合的函数的行来实现这一点,但是新语法LATERAL更加简洁。无论如何,对于Postgres 9.2或更早的版本:
SELECT
SELECT generate_table(max(rundate), branch) FROM t_index_of_imported_files GROUP BY branch;