1

Postgresql で複合型を作成したとします。

CREATE TYPE custom_type AS
   (x integer
    y integer);

関数で配列として使用する必要があります。

...
DECLARE
customVar custom_type[];
BEGIN
....

私の質問は、custom_type の特定のコンポーネントにアクセスするにはどうすればよいですか?

たとえば、custom_type 配列の 3 番目の要素に「x」を (再) 割り当てたいとします...

4

2 に答える 2

2

与えられた:

SELECT ARRAY[(1,2),(3,4)]::custom_type[];

配列添字を使用して、フィールドを名前で参照します。

regress=> SELECT (ARRAY[(1,2),(3,4)]::custom_type[])[1].x;
 x 
---
 1
(1 row)
于 2012-11-15T11:31:17.320 に答える
2
postgres=> タイプ pt を (x int, y int) として作成します。
タイプを作成

postgres=> 関数 fx() を作成または置換
void を $$ として返します
pt[] = ARRAY[(10,20),(30,40)]; を宣言します。xx pt を宣言します。
始める
  for i in array_lower(a, 1) .. array_upper(a,1)
  ループ
    xx = a[i]; xx.x := xx.x + 1; [i] := xx; レイズ通知 '%', a[i].x;
  ループを終了します。
終わり;
$$ 言語 plpgsql;
関数の作成
postgres=> fx() を選択;
注意: 11
注意: 31
 FX
────

(1行)

assign ステートメントのターゲットに対する重大な制限は、1 レベルのネストされたプロパティのみを参照できる可能性です。この制限は、補助変数によって回避できます (あまり友好的ではありません)。内部実装は単純すぎますが、一般的なプログラミング言語と比較すると強力ではありませんが、高速であり、一般的なストアド プロシージャの使用には十分です。

于 2012-11-16T18:03:55.053 に答える