如何在Postgres PL / pgSQL中将复合类型的数组选择为局部变量?

问题描述

这是一个简单的问题:在PL / pgsql中,如何选择复合对象数组到局部变量中?

我正在使用Postgres13。这是我想做的一个例子:

create type udt_foo as (
    col1 numeric,col2 numeric
);

create or replace procedure bar ()
language plpgsql as
$$
declare
    lv_foos              udt_foo[];
begin

    select ...
    into strict lv_foos
    from some_table t;

end
$$ ;

解决方法

这两个例程都很简短,因此请对其进行测试,看看它们之间的区别(如果有)。 但我会修改两者以实际产生输出。或使比较统一为第三个例程,该例程为两个例程生成输出:

create or replace procedure show_bar(udt_foo[]) 
language plpgsql as
$$
declare
    indx integer; 
begin
    for indx in 1 .. array_length(udt_doo,1)
    loop
        raise notice 'foo(col1,col2)=>(%,%)',udt_foo[indx].col1,udt_foo[indx].col2;
    end loop;
end;
$$ ;  

然后将以下内容添加到每个选择之后;

call show_bar(lv_foos); 

简而言之,当遇到2种或更多可能等效的方法时,在您自己的环境中对其进行测试,不要只是征求意见。选择产生所需输出的那个。如果两者都这样做,则选择最简单和最容易理解的方式。