0

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

我在 Postgres 13 上。这是我想做的一个例子:

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
$$ ;
4

1 回答 1

1

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

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 种或更多可能等效的方法时,请在自己的环境中对其进行测试,而不仅仅是征求意见。选择产生所需输出的那个。如果两者都这样做,请选择最简单和最容易理解的。

于 2020-11-01T19:34:08.440 回答