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

Hideyuki Kawashima kawasima @ ayu.ics.keio.ac.jp
2003年 7月 9日 (水) 12:28:36 JST


北村さま

お返事ありがとうございます。
tableを引数にする方法、参考にさせていただきます。
失礼します。

> 北村です。
> 
> > 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 メーリングリストの案内