【发布时间】:2016-10-12 21:01:46
【问题描述】:
全部! 我有以下情况: 1. 一个相当复杂的 SELECT 语句。我需要其结果集中的前 n 行,将其称为 $sql 并带有连接和多个 WHERE 子句。 2. 一个聚合 SELECT 语句,我使用了复杂的 select 语句的所有结果,如下所示:
SELECT SUM(a), (SELECT DISTINCT....) etc.
目前的实现看起来是这样的,这两个步骤是在 perl 代码中分别完成的。
- 首先创建一个游标“DECLARE cur CURSOR WITHOUT HOLD FOR $sql”
- 然后获取前 n 个命中。
-
然后摘要调用将整个 $sql 插入到语句中:
SELECT SUM(foo) AS sum1 FROM A, ($sql) AS B WHERE A.doc=? AND A.id=B.id
这很昂贵,$sql 需要 6000 行。
但是,由于 PL/pgSQL 不强,我无法真正将其描绘成一个存储过程。我要创建一个临时文件吗?带有第一个查询的结果集的表并稍后在第二步中使用它?或者更好地一步完成选择和摘要并将结果存储在临时文件中。桌子?以编程方式,我选择了第二个,但同样,我需要对此提出建议。
我也非常感谢任何代码草图,以便更好地掌握 PL/pgSQL 并了解如何解决这种“选择和聚合”类型的问题,返回两种值。 提前谢谢你。
【问题讨论】:
-
您可以尝试使用
SELECT INTO并创建临时表。
标签: postgresql select stored-procedures sum