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