[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 メーリングリストの案内