[pgsql-jp: 30417] Re: PL/pgSQLの引数を32 より増やす方法

Jun Kitamura kitamura @ zoozee.jp
2003年 7月 8日 (火) 23:42:43 JST


北村です。

> PL/pgSQLの引数を32より増やす方法を探しています。
> とりあえず次のようにやればできるのですが、
(略)
>     #define INDEX_MAX_KEYS          512
>     #define FUNC_MAX_ARGS           INDEX_MAX_KEYS
> 
> にしてから、configure & make
> 
> 川島の環境では、#define INDEX_MAX_KEYS 1024 にすると
> initdbがfailして、めげました。

引数を増やす方法では無いのですが、PostgreSQL はテーブルをク
ラス、つまり型として扱えます。

例えば(PostgreSQL 7.2.4 で実行)、

create table t1(a int4, b int4, c int4);
insert into t1(a,b,c) values (1,2,3);
insert into t1(a,b,c) values (10,20,30);

create or replace function ftest(t1) returns int4 as '
 DECLARE
  tbl ALIAS FOR $1;
  ret int4;
 BEGIN
  RETURN (tbl.a + tbl.b + tbl.c);
 END;
' language 'plpgsql';

select ftest(tt) from t1 tt;
 ftest
-------
     6
    60
(2 rows)

select ftest(tt) from t1 tt where tt.a = 1;
 ftest
-------
     6
(1 row)

と、3つの引数を 1つにまとめることが可能です。
他にもいろんなパターンがあり、テーブルの型となるような結果を
期待する SELECT 文 を使えば、「たぶん」引数の制限を変更する
ことなく、実装できるかと思います。

ソースのハッキングなどをしていて、「改造」するのが目的である
ならば、無視してくださいw。
でわでわ。





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