Postgresql 在记录变量中选择多个行和列

Postgresql 在记录变量中选择多个行和列,postgresql,plpgsql,postgresql-9.3,Postgresql,Plpgsql,Postgresql 9.3,在plpgsql函数中,如何在记录变量中选择多个行和列 例如,我想将两列(yearinteger和value)的多个实例选择到一个记录变量(yearvalues)中 *编辑-下面的代码只是一个较长函数的一部分,我需要变量yearvalues包含一个表中的多行和多列,从中我可以创建更多的变量 CREATE OR REPLACE FUNCTION fn_function () RETURNS TABLE () AS $$ DECLARE year c.year%TYPE; value

在plpgsql函数中,如何在记录变量中选择多个行和列

例如,我想
将两列(
yearinteger
value
)的多个实例选择到一个记录变量(
yearvalues
)中

*编辑-下面的代码只是一个较长函数的一部分,我需要变量
yearvalues
包含一个表中的多行和多列,从中我可以创建更多的变量

CREATE OR REPLACE FUNCTION fn_function ()
RETURNS TABLE () AS $$
DECLARE
    year c.year%TYPE;
    value c.value%TYPE;
    yearvalues record;
BEGIN
    FOR yearvalues IN 
    SELECT c.year, c.value FROM c
    LOOP
    END LOOP;
-- creation of additional variables from the yearvalues variable
END;
$$ LANGUAGE plpgsql;

plpgsql中没有表变量(至少在v10之前)

您可以使用临时表:

您可以用CTE(在简单情况下甚至子查询)替换单个查询的本地范围。“单个查询”可以包含多个命令(在数据修改CTE中)。这将是最有效的:

或者将游标与循环组合(考虑FNC-函数下的示例):


。。。当你运行这个函数时,会发生什么?(始终显示准确的错误消息文本)。如果函数返回一个表,为什么不使用一个只返回
select
结果的
sql
函数呢?或PL/pgSQL函数中的
返回查询
?感谢您介绍各种选项;我想我正在寻找游标。你是什么意思?(至少到v9.4版)?这句话有点让人困惑。这是否意味着较新版本中有表变量?@user544262772:在撰写本文时,我怎么知道会有表变量?在版本10中仍然没有表变量,我不希望在将来的版本中发生变化。@ErwinBrandstetter我有一个问题,请你进入这个房间好吗?此邮件将被删除