スポンサーサイト

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

MySQLでシステムプロパティ

システムプロパティをDBで管理するではPostgreSQLでしたが今回はMySQL版です。
MySQLは不慣れなので、ストアードプロシージャーを作るのに苦労しました。

PROCEDUREでは、RETURNが使えないんですかね。本当はパラメーターのチェックをしてすぐRETURNしたかったのですが、しょうがなくIF文のネストが深くなってしまいました。

また、set_propertyでは、updateしてから1件も登録されない場合insertにしたかったのですが、これもやり方がわからなくて、毎回select文を発行することにしました。

■テーブル

CREATE TABLE t_system_property (
system_property_id bigint NOT NULL AUTO_INCREMENT PRIMARY KEY,
system_property_name text NOT NULL,
system_property_value text NOT NULL DEFAULT '',
ins_dt datetime NOT NULL,
upd_dt datetime NOT NULL,
bk text
) type=InnoDB;

■取得

CREATE FUNCTION get_property(p_name TEXT) RETURNS TEXT
BEGIN
DECLARE w_value TEXT;
IF p_name IS NULL OR '' = p_name THEN
RETURN NULL;
END IF;

SELECT
system_property_value
INTO
w_value
FROM
t_system_property
WHERE
system_property_name = p_name
;
RETURN w_value;
END;

■設定

CREATE PROCEDURE set_property(
p_name text
,p_value text
)
BEGIN
DECLARE w_cnt int;
DECLARE w_now datetime;

IF p_name IS NOT NULL AND '' <> p_name THEN
SELECT
count(*)
INTO
w_cnt
FROM
t_system_property
WHERE
system_property_name = p_name;

SET w_now = now();
IF 0 = w_cnt THEN
INSERT INTO t_system_property(
system_property_name
,system_property_value
,ins_dt
,upd_dt
) VALUES (
p_name
,p_value
,w_now
,w_now
);
ELSE
UPDATE t_system_property SET
system_property_value = p_value
,upd_dt = w_now
WHERE
system_property_name = p_name;
END IF;
END IF;
END;

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

COMMENTS

COMMENT FORM

TRACKBACK


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

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