如何在plpgsql中引用结果集



在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)中没有"表变量"。你可以使用:
  • 游标
  • 临时表、未记录表或常规表
  • 将原始查询作为子查询,或执行相同操作的函数或视图
  • cte(用于单个SQL语句的作用域)

相关问题:从表变量
中选择函数返回一个包含节点所有子节点的表

实际问题

对于你的实际问题,我建议数据修改CTEs:

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代码中,您可以在查询中引用变量…

相关内容

  • 没有找到相关文章

最新更新