[pgsql-jp: 26222] Re: PL/pgSQLで宣言した定数を複数の関数で使い回したい

Jun Kitamura kitamura @ zoozee.jp
2002年 6月 1日 (土) 01:02:50 JST


北村@zoozee です。

> PL/pgSQLで多くの関数を作成しているのですが、その中で
> よく定数の宣言を使っています。
> 
> hoge CONSTANT integer := 1;
> 
> のような感じです。
> 
> しかし、普通にDECLAREで宣言すると、他の関数から参照できないため
> 今のところ以下のようなSQL関数を作成しています。
> 
> create function hoge()
>  returns integer as 'select 1 as result' language 'sql'
> 
> しかし、これだと記述がいかにも長いのと、定数をまとめて
> 管理できないので、見通しが悪く感じられます。
> 
> そこで、例えばOracleのCREATE PACKAGEのような形で、
> 一箇所でまとめて宣言しておけば、グローバルで定数を利用可能に
> する方法があれば、是非そちらに移行したいと考えています。
> あるいは単純に宣言だけをincludeするような方法でも構いません。

Oracle の CREATE PACKAGE を存じませんで恐縮なのですが、定数をひとつのテー
ブルにまとめてしまって、キーとなる文字列から該当する数値を取り出す関数を
用意すれば可能かな?と思います。ただし、型に応じて関数の数が増えちゃいま
すが。条件式の中で使えるし、定数を一箇所にまとめておくことはできますよね。

create table tConst(
 defkey text,
  primary key (defkey),
 value int4
);

insert into tConst values ('HOGE',1);
insert into tConst values ('FOO',2);
insert into tConst values ('POI',3);

create function fc(text) returns int4 as '
 select value from tConst where defkey = upper($1)
' language 'sql';

例:
select * from t1 where a = fc('poi');





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