【PostgreSQL】【ストアド】INSERT / UPDATEを行い、それ以外のレコードはDELETEをする

初めに

http://blogs.yahoo.co.jp/dk521123/33945911.html
で、INSERT / UPDATEを行う事はできたが、それ以外のデータはゴミになるので削除したい。
以下に同じような悩みの方がいたが、他の方法を考えてみた。(結局はヒントになったけど)
http://blogs.yahoo.co.jp/dk521123/MYBLOG/write.html

解決策

 * 対象のテーブルに「更新日時」にあたる項目があれば、INSERT / UPDATEをした後に
   その更新日時前のデータを削除対象にする

サンプル(PostgreSQL

あくまでサンプル。変更する必要があり。とりあえずイメージを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;

関連記事

ストアドファンクション

http://blogs.yahoo.co.jp/dk521123/33329958.html

PostgreSQL】UPDATE or INSERT を行うストアドの作成

http://blogs.yahoo.co.jp/dk521123/33945911.html

INSERT / UPDATEを行い、それ以外のレコードはDELETEをする

http://blogs.yahoo.co.jp/dk521123/33954185.html

データあればUPDATE、なければINSERT

http://blogs.yahoo.co.jp/dk521123/30656970.html

SQL】レコードが存在していなかったら、INSERTするには

http://blogs.yahoo.co.jp/dk521123/34139759.html