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