-- 仮会員テーブル 変更
CREATE OR REPLACE FUNCTION f_trial_member_update(IN integer, IN integer, IN integer, IN varchar, IN varchar, IN varchar, IN varchar, IN varchar, IN varchar, IN varchar, IN varchar, IN integer, IN varchar, IN date, IN integer, IN varchar, IN integer, IN integer, IN date, IN varchar, IN varchar, IN integer, OUT errcd integer,  OUT errmsg character varying,  OUT code integer) AS
$BODY$

DECLARE
    kubun ALIAS FOR $1;               -- 区分
    i_sessionid ALIAS FOR $2;         -- セッションID
    i_memberdiv ALIAS FOR $3;         -- 会員区分
    i_lastnm ALIAS FOR $4;            -- å§“
    i_firstnm  ALIAS FOR $5;          -- 名
    i_lastnmkana ALIAS FOR $6;        -- 姓(かな)
    i_firstnmkana ALIAS FOR $7;       -- 名(かな)
    i_mailaddr ALIAS FOR $8;          -- メールアドレス
    i_mobmailaddr ALIAS FOR $9;       -- 携帯電話メールアドレス
    i_password ALIAS FOR $10;         -- パスワード
    i_nicknm ALIAS FOR $11;           -- ニックネーム
    i_secquestioncd ALIAS FOR $12;    -- 秘密の質問C
    i_secquestionans ALIAS FOR $13;   -- 秘密の質問の答え
    i_birthdate ALIAS FOR $14;        -- 数値生年月日
    i_sex ALIAS FOR $15;              -- 性別
    i_selfintro ALIAS FOR $16;        -- 自己紹介
    i_memberstate ALIAS FOR $17;      -- 会員状態
    i_maildiv ALIAS FOR $18;          -- メール区分
    i_registdate ALIAS FOR $19;       -- 登録日
    i_updusrnm ALIAS FOR $20;         -- 更新ユーザ名
    i_updpcnm ALIAS FOR $21;          -- 更新マシン名
    i_updcnt ALIAS FOR $22;           -- 更新カウンタ

    sql1 varchar;
    _kubun integer := kubun;
    cntcheck integer;
    makerc integer;
    labelc integer;
    MES_001 varchar := 'セッションID' || i_sessionid || 'は登録済みです';
    MES_002 varchar := '品名が指定されていません';
BEGIN



-- 必須チェック --

    -- 処理区分
    IF _kubun IS NULL OR kubun NOT IN (1,2,3) THEN
        RAISE EXCEPTION '処理区分が不正です';
    END IF;

    -- 同じメールアドレスが存在するときアップデート
    IF _kubun IN (1) THEN
        SELECT mailaddr INTO cntcheck FROM t_trial_member WHERE mailaddr = i_mailaddr;
        IF FOUND THEN
            _kubun := 2;
        END IF;
    END IF;

    IF _kubun IN (2,3) THEN
        IF i_sessionid IS NULL THEN
            RAISE EXCEPTION 'セッションIDの引数は必須です';
        END IF;
        IF i_updcnt IS NULL THEN
            RAISE EXCEPTION '更新カウンタの引数は必須です';
        END IF;

    END IF;

    IF _kubun IN (1) THEN
        IF i_lastnm IS NULL THEN
            RAISE EXCEPTION '姓の引数は必須です';
        END IF;
        IF i_firstnm IS NULL THEN
            RAISE EXCEPTION '名の引数は必須です';
        END IF;
        IF i_lastnmkana IS NULL THEN
            RAISE EXCEPTION '姓(かな)の引数は必須です';
        END IF;
        IF i_firstnmkana IS NULL THEN
            RAISE EXCEPTION '名(かな)の引数は必須です';
        END IF;
        IF i_mailaddr IS NULL THEN
            RAISE EXCEPTION 'メールアドレスの引数は必須です';
        END IF;
        IF i_password IS NULL THEN
            RAISE EXCEPTION 'パスワードの引数は必須です';
        END IF;
        IF i_secquestioncd IS NULL THEN
            RAISE EXCEPTION '秘密の質問コードの引数は必須です';
        END IF;
        IF i_secquestionans IS NULL THEN
            RAISE EXCEPTION '秘密の質問の答えの引数は必須です';
        END IF;
        IF i_sex IS NULL THEN
            RAISE EXCEPTION '性別の引数は必須です';
        END IF;
        IF i_registdate IS NULL THEN
            RAISE EXCEPTION '登録日の引数は必須です';
        END IF;
        IF i_updusrnm IS NULL THEN
            RAISE EXCEPTION '更新ユーザ名が指定されていません';
        END IF;
        IF i_updpcnm IS NULL THEN
            RAISE EXCEPTION '更新マシン名が指定されていません';
        END IF;
    END IF;

    -- 存在チェック
    IF _kubun IN (2,3) THEN
        SELECT sessionid INTO cntcheck FROM t_trial_member WHERE sessionid = i_sessionid;
          IF NOT FOUND THEN
            RAISE EXCEPTION 'そのセッションIDのレコードは存在しません';
        END IF;
    END IF;

    -- 更新カウンタチェック
    IF _kubun IN (2,3) THEN
        SELECT updcnt INTO cntcheck FROM t_trial_member WHERE sessionid = i_sessionid;
          IF NOT FOUND OR cntcheck <> i_updcnt THEN
            errcd := -11;
            errmsg := '更新カウンタが不正';
            RETURN;
          END IF;
    END IF;

 ---  更新処理 ---


    IF _kubun = 1 THEN
        -- 追加
        INSERT INTO t_trial_member(
            sessionid, memberdiv,   lastnm,   firstnm,   lastnmkana,   firstnmkana,   mailaddr,   mobmailaddr,   password,   nicknm,   secquestioncd,   secquestionans,   birthdate,   sex,  selfintro,   memberstate,   maildiv,   registdate,   updusrnm,   updpcnm)
        VALUES(
          i_sessionid, i_memberdiv, i_lastnm, i_firstnm, i_lastnmkana, i_firstnmkana, i_mailaddr, i_mobmailaddr, i_password, i_nicknm, i_secquestioncd, i_secquestionans, i_birthdate, i_sex, i_selfintro, i_memberstate, i_maildiv, i_registdate, i_updusrnm, i_updpcnm
        );
        errcd := 1;
        code := i_sessionid;
        RETURN;

    -- 変更
    ELSIF _kubun = 2 THEN
        -- 更新ユーザ
        UPDATE t_trial_member SET
          sessionid = i_sessionid,
          memberdiv = i_memberdiv,
          lastnm= i_lastnm,
          firstnm= i_firstnm,
          lastnmkana= i_lastnmkana,
          firstnmkana= i_firstnmkana,
          mailaddr= i_mailaddr,
          mobmailaddr= i_mobmailaddr,
          password= i_password,
          nicknm= i_nicknm,
          secquestioncd= i_secquestioncd,
          secquestionans= i_secquestionans,
          birthdate= i_birthdate,
          sex = i_sex,
          selfintro= i_selfintro,
          memberstate= i_memberstate,
          maildiv= i_maildiv,
          registdate= i_registdate,
          updusrnm = i_updusrnm,
          updpcnm= i_updpcnm
        WHERE mailaddr= i_mailaddr;

        errcd := 1;
        code := i_sessionid;
        RETURN;

    -- 削除
    ELSIF _kubun =3 THEN
        UPDATE t_trial_member
           SET delflg   = TRUE,
               updusrnm = i_updusrnm,
               updpcnm  = i_updpcnm
           WHERE sessionid = i_sessionid;

        errcd := 1;
        code := i_sessionid;

        RETURN;
    END IF;
END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;