Postgresで Insert Updateをするための関数を書いた
久しぶりにplpgsqlなんてものを使った。
くじの配送履歴テーブル用。
CREATE OR REPLACE FUNCTION func_merge_campaign_send_log(campaignno integer, mailaddr text, hashaddr text, multiplier integer) RETURNS VOID AS
$BODY$
BEGIN
INSERT INTO campaign_send_log (campaign_no,mail_address,hashed_address,prize_multiplier) VALUES (campaignno,mailaddr,hashaddr,multiplier);
EXCEPTION WHEN unique_violation THEN
UPDATE campaign_send_log SET mail_address = mailaddr, hashed_address = hashaddr, prize_multiplier = multiplier
WHERE campaign_no = campaignno AND lower(mail_address) = lower(mailaddr);
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
仮引数のスペルをミスしていた。そのままDBに流してテストOKとなり、アプリ側を実装し始めてミスに気づいたため、慌てて訂正。コピペは駄目ですね…