小编典典

使用另一个查询的输出动态执行查询

sql

我有一个名为generate_table的函数,该函数需要2个输入参数(rundate::datebranch::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,但是我无法使其正常工作。

有关如何执行此操作的任何建议?


阅读 154

收藏
2021-04-14

共1个答案

小编典典

您可以使用 LATERAL JOIN Postgres 9.3+中的新增功能通过普通的SELECT查询来执行此操作

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在任何情况下都可以引用较早的项。

在旧版本中,可以通过扩展SELECT列表中用于返回集合的函数的行来实现这一点,但是新语法LATERAL更加简洁。无论如何,对于Postgres
9.2或更早的版本:

SELECT generate_table(max(rundate), branch)
FROM   t_index_of_imported_files
GROUP  BY branch;
2021-04-14