[pgsql-jp: 29184] PL/pgSQL での配列について

SUGIMURA Takashi 杉村 貴士 sugimura @ infoscience.co.jp
2003年 2月 20日 (木) 23:52:57 JST


杉村です。こんばんは。

PL/pgSQL で配列を使う必要があるのですが、
さまざまなドキュメントに当たっても見つけることが出来ずに困っています。

Oracle の PL/SQL では索引付き表を使うことで実現できています。

まず、環境は次の通りです。

PostgreSQL 7.2.3, 7.3.2 (7.2.4 は試していません)
FreeBSD 4.7-stable, 5.0-current

例えばこんな感じのことがしたいです。
配列でなく、単なる変数なら問題ありません。

------------------------------------------- (list1)
create or replace function
sample(bigint) returns bigint as '
declare
  a bigint[];
begin
  -- select into で代入
  select into a[0] value1 from hoge where id = $1;
  return a[0];
end;
' language 'plpgsql';
-------------------------------------------

もしくは

------------------------------------------- (list2)
create or replace function
sample(bigint) returns bigint as '
declare
  a bigint[];
begin
  -- 単に代入
  a[0] := $1;
  return a[0];
end;
' language 'plpgsql';
-------------------------------------------

list2 を実行してみますと、エラーメッセージとしては次のように言われます。

-------------------------------------------
CREATE FUNCTION
hoge=# select sample(10);
WARNING:  plpgsql: ERROR during compile of sample near line 5
ERROR:  parse error at or near "["
-------------------------------------------

宣言部ではエラーになりませんので "a[0]" という使い方が悪いんでしょうが、
どう直せば良いのかわからずにいます。a(0) などはもちろん試しています。
この配列は可変長にしたいので、配列では実現できないのかもしれないのかもしれませんが
代替方法が見つからずにいます。

なにか根本的な勘違いをしているのかもしれません。
アドバイス頂ければ幸いです。

---
  ○/
<□   杉村 貴士 <sugimura @ jp.FreeBSD.org> 
 />           <sugimura @ YasudaKei.org> http://YasudaKei.org/




pgsql-jp メーリングリストの案内