スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

システムプロパティをDBで管理する

システムの中で利用する固定値は通常、定数クラス(Javaならインターフェース)などで管理すると思います。
でも、定数クラスだといちいちコンパイルしたりデプロイしたり、めんどくさいです。
頻繁に変わる値だったり、一時的に変えたい値だったりする場合、定数クラスでは無くDBで管理する方が便利なことがあります。
ということで、システムプロパティをDBで管理するサンプルの紹介です。
まずテーブルを定義します。

CREATE TABLE t_system_property
(
system_property_id BIGSERIAL NOT NULL,
system_property_name TEXT DEFAULT '' NOT NULL,
system_property_value TEXT DEFAULT '' NOT NULL,
ins_ts TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
upd_ts TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
bk TEXT,
PRIMARY KEY(system_property_id),
UNIQUE(system_property_name)
);

キーと値の組み合わせを管理します。キーはかぶらないようにユニーク制約をかけます。
このままでも、使えるんですがちょっとテーブル名やカラム名が長いので、簡単に利用するためにPL/pgSQLを定義します。
■取得用

CREATE OR REPLACE FUNCTION get_property(
p_system_property_name text
) RETURNS text AS $$
DECLARE
w_result text;
BEGIN
IF NOT uv_is_set(p_system_property_name) THEN
RETURN NULL;
END IF;

SELECT
system_property_value
INTO
w_result
FROM
t_system_property
WHERE
system_property_name = p_system_property_name;
RETURN w_result;
END;
$$ LANGUAGE plpgsql;

■設定用

CREATE OR REPLACE FUNCTION set_property(
p_system_property_name text
,p_system_property_value text
) RETURNS void AS $$
DECLARE
w_now timestamp with time zone := 'now';
BEGIN
IF NOT uv_is_set(p_system_property_name) THEN
RETURN;
END IF;

UPDATE t_system_property SET
system_property_value = p_system_property_value
,upd_ts = w_now
WHERE
system_property_name = p_system_property_name;

IF NOT FOUND THEN
INSERT INTO t_system_property(
system_property_name
,system_property_value
) VALUES (
p_system_property_name
,p_system_property_value
);
END IF;
END;
$$ LANGUAGE plpgsql;

取得なら
select get_property('aaa');
設定なら
select set_property('aaa', 'bbb');
なので簡単に使えるようになります。

取得のSQLはただselectをラッピングしただけですが、設定のSQLは既に登録されている場合ならupdate、新しく登録する場合はinsertを使いわけています。
updateが一件も影響を与えない場合、すなわちまだ登録されていない場合は変数FOUNDが偽になるので、この値を見てinsertするかどうか判断できるようになります。

一行入魂サイトにまとめがあります。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。