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

どちらのルーチンも短いので、テストして、違いがある場合はその違いを確認してください。しかし、実際に出力を生成するには、両方を変更します。または、比較を均一にするために、両方の出力を生成する 3 番目のルーチンを作成します。

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

次に、select の後に以下をそれぞれに追加します。

call show_bar(lv_foos); 

要するに、同等の可能性のある 2 つ以上の方法に直面した場合は、自分の環境でそれらをテストし、意見を求めるだけではいけません。目的の出力を生成するものを選択します。どちらもそうである場合は、最も単純で最も理解しやすいものを選択してください。

于 2020-11-01T19:34:08.440 に答える