■ はじめに
ストアド ~ UPDATE or INSERT を行う ~
https://dk521123.hatenablog.com/entry/2014/09/01/224134
で、INSERT / UPDATEを行う事はできたが、 それ以外のデータはゴミになるので削除したい。
【1】解決策
* 対象のテーブルに「更新日時」にあたる項目があれば、 INSERT / UPDATEをした後に、 その更新日時前のデータを削除対象にする
【1】サンプル
-- あくまでサンプル。変更する必要があり。 -- とりあえずイメージをSQL文にした CREATE OR REPLACE FUNCTION update_Or_Insert_delete_Other_Person( targetId character(8), targetName character varying(100), targetSex character(1) ) RETURNS TIMESTAMP AS $$ DECLARE currentTime TIMESTAMP; BEGIN currentTime := TIMESTAMP 'now'; RAISE NOTICE 'currentTime = %', currentTime; UPDATE person SET name = targetName, sex = targetSex, updatedate = currentTime WHERE id = targetId; IF NOT found THEN BEGIN INSERT INTO person( id, name, sex, updatedate) VALUES ( targetId, targetName, targetSex, currentTime); END; END IF; DELETE FROM person WHERE updatedate < currentTime; RETURN currentTime; EXCEPTION WHEN unique_violation THEN RETURN null; END; $$ LANGUAGE plpgsql;
関連記事
ストアド ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2010/08/06/112528
ストアド ~ UPDATE or INSERT を行う ~
https://dk521123.hatenablog.com/entry/2014/09/01/224134