複合配列を定義し、配列の3つの要素を初期化してから、ループ内の各要素を反復処理したいと思います。このループが必要であり、私が抱えている問題の要件としてそれを繰り返す必要があります。
私は数日間、コードを書いてネット上のいくつかのリソースを参照しようとしましたが、これはうまくいきませんでした。誰かがそれを手伝ってくれる?これがコードですが、最初の初期化でも機能していないため、残りの要件のコードがありません(初期化後に繰り返すため)
CREATE TYPE temp_n_inv_item AS (
name text,
supplier_id integer,
price numeric
);
CREATE OR REPLACE function temp_n_bulk_load2()
returns void
as
$$
declare
v_t temp_n_inv_item[];
BEGIN
v_t[1] := ARRAY ['Item1',1,10];
v_t[2] := ARRAY ['Item2',2,20];
v_t[3] := ARRAY ['Item3',3,30];
-- raise notice 'first array % ', v_t[1];
--raise notice 'first array % ', v_t[2];
--raise notice 'first array % ', v_t[3];
--iterate though each of the v_t array in a loop
null; --added as a temporary placeholder
END;
$$
language plpgsql;
--select temp_n_bulk_load2()
よろしく、DbuserN
更新驚いたことに、質問を投稿した後、1つの参照が表示され、割り当てが機能しているのがわかりましたが、戻り値の型を機能していない配列に変更しようとしています(これは追加の問題です)。ただし、割り当ては以下のように修正されていますが、以下のエラーは「エラー:複合型を返す関数から非複合値を返すことができません」 です。コードを修正しました:
CREATE OR REPLACE function temp_n_bulk_load2()
returns temp_n_inv_item
as
$$
declare
v_t temp_n_inv_item[];
BEGIN
v_t[1] := row ('Item1',1,10);
v_t[2] := row ('Item2',2,20);
v_t[3] := row ('Item3',3,30);
raise notice 'first array % ', v_t[1];
raise notice 'first array % ', v_t[2];
raise notice 'first array % ', v_t[3];
--iterate though each of the v_t array in a loop
null; --added as a temporary placeholder
return v_t;
END;
$$
language plpgsql;
ここでは、を使用して生成したデータ型の配列を作成しています
CREATE TYPE temp_n_inv_item AS (
name text,
supplier_id integer,
price numeric
);
したがって、データ型の配列をとして返すだけtemp_n_inv_item[]
です。
CREATE OR REPLACE FUNCTION adm.temp_n_bulk_load2()
RETURNS boolean AS
$BODY$
declare
v_t temp_n_inv_item[];
BEGIN
/*CREATE TYPE temp_n_inv_item AS (
name text,
supplier_id integer,
price numeric
);*/
v_t[1] := row ('Item1',1,10);
v_t[2] := row ('Item2',2,20);
v_t[3] := row ('Item3',3,30);
raise notice 'first array % ', v_t[1];
raise notice 'first array % ', v_t[2];
raise notice 'first array % ', v_t[3];
--iterate though each of the v_t array in a loop
//updated
FOR cnt in 1..(array_length(v_t,1))
LOOP
Raise notice ' array value % ', v_t[cnt];
END LOOP;
return true;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
これがあなたの問題を解決することを願っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加