在plpgsql过程中,我正在研究如何引用和使用从第一个查询获得的结果集。以下代码试图演示我要实现的目标:

do
$body$
DECLARE
  ref_result_set ???;
BEGIN

  ref_result_set :=  select 'asdf';

  perform xxx from ref_result_set;
  perform yyy from ref_result_set;

END;


$body$
language plpgsql;

我在看游标,但是只有一个选项可以逐行获取,而不是整个集合。有没有什么办法可以在不首先写入表的情况下实现这一点?

最佳答案

提出的问题
plpgsql(或SQL)中没有“表变量”。您可以使用:
cursors
temporary, unlogged or regular tables
作为子查询的原始查询,或执行相同操作的函数或视图
CTEs(用于单个SQL语句的作用域)
相关问题:
Select from a table variable
Function to return a table of all children of a node
实际问题
对于您的实际问题,我建议您:

WITH sel AS (
   SELECT col1, col2, ..
   FROM   tbl1
   WHERE  <expensive condition>
   )
, ins1 AS (
   INSERT INTO test1 (col1, col2, ..)
   SELECT col1, col2, ..
   FROM   sel
   WHERE  <some condition>
   )
INSERT INTO test2 (col1, col2, ..)
SELECT col1, col2, ..
FROM   sel
WHERE  <some condition>;

您可以在plpgsql代码中使用它,也可以将其作为独立的SQL命令使用。
在plpgsql代码中,您可以引用查询中的变量。。。

关于postgresql - 如何在plpgsql中引用结果集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24650546/

10-15 13:57