-- 品目ウェブ属性テーブル 変更
CREATE OR REPLACE FUNCTION f_consumer_attr_update( IN integer, IN integer, IN varchar, IN integer, IN varchar, IN varchar, IN varchar, IN varchar,IN varchar, IN integer, IN varchar, IN varchar,IN varchar,IN varchar,IN varchar, IN varchar, IN integer, OUT errcd integer, OUT errmsg character varying, OUT code integer) AS
$BODY$

DECLARE
    kubun ALIAS FOR $1;               -- 区分
    i_membercd ALIAS FOR $2;          -- 会員C
    i_postalcd ALIAS FOR $3;          -- 郵便番号
    i_prefcd ALIAS FOR $4;            -- 都道府県C
    i_addr1 ALIAS FOR $5;             -- 住所１
    i_addr2 ALIAS FOR $6;             -- 住所２
    i_telno1 ALIAS FOR $7;            -- 電話番号１
    i_telno2 ALIAS FOR $8;            -- 電話番号２
    i_sendpostalcd ALIAS FOR $9;      -- 送付先郵便番号
    i_sendprefcd ALIAS FOR $10;       -- 送付先都道府県C
    i_sendaddr1 ALIAS FOR $11;        -- 送付先住所１
    i_sendaddr2 ALIAS FOR $12;        -- 送付先住所２
    i_sendtelno1 ALIAS FOR $13;       -- 送付先電話番号１
    i_addressee ALIAS FOR $14;        -- 送付先宛名

    i_updusrnm ALIAS FOR $15;         -- 更新ユーザ名
    i_updpcnm ALIAS FOR $16;          -- 更新マシン名
    i_updcnt ALIAS FOR $17;           -- 更新カウンタ

    sql1 varchar;

    cntcheck integer;
    makerc integer;
    labelc integer;
    MES_001 varchar = '会員コード' || i_membercd || 'は登録済みです';
    MES_002 varchar = '品名が指定されていません';
BEGIN

-- 必須チェック --
--SELECT itemcd INTO cntcheck FROM t_item_basic_attr WHERE itemcd = itemcode AND structcd = structcode;

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

    IF kubun IN (1,2,3) THEN
        IF i_membercd 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
        IF i_updcnt IS NULL THEN
            RAISE EXCEPTION '更新カウンタの引数は必須です';
        END IF;

    END IF;


    -- 存在チェック
    IF kubun IN (1,2,3) THEN
        SELECT membercd INTO cntcheck FROM t_member_basic_attr WHERE membercd = i_membercd;
          IF NOT FOUND THEN
            RAISE EXCEPTION 'その会員コードのレコードは存在しません';
        END IF;
    END IF;

    IF kubun IN (1) THEN
        SELECT membercd INTO cntcheck FROM t_consumer_attr WHERE membercd = i_membercd;
          IF FOUND THEN
            RAISE EXCEPTION 'その会員コードのレコードは存在します';
        END IF;
    END IF;


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

 ---  更新処理 ---


    IF kubun = 1 THEN
        -- 追加
        INSERT INTO t_consumer_attr(
            membercd,
            postalcd,
            prefcd,
            addr1,
            addr2,
            telno1,
            telno2,
            sendpostalcd,
            sendprefcd,
            sendaddr1,
            sendaddr2,
            sendtelno1,
            addressee,
            updusrnm,
            updpcnm
        )VALUES(
            i_membercd,
            i_postalcd,
            i_prefcd,
            i_addr1,
            i_addr2,
            i_telno1,
            i_telno2,
            i_sendpostalcd,
            i_sendprefcd,
            i_sendaddr1,
            i_sendaddr2,
            i_sendtelno1,
            i_addressee,
            i_updusrnm,
            i_updpcnm
        );
        errcd = 1;
        RETURN;

    -- 変更
    ELSIF kubun = 2 THEN
        -- 更新ユーザ
        UPDATE t_consumer_attr SET
            postalcd = i_postalcd,
            prefcd = i_prefcd,
            addr1 = i_addr1,
            addr2 = i_addr2,
            telno1 = i_telno1,
            telno2 = i_telno2,
            sendpostalcd = i_sendpostalcd,
            sendprefcd = i_sendprefcd,
            sendaddr1 = i_sendaddr1,
            sendaddr2 = i_sendaddr2,
            sendtelno1 = i_sendtelno1,
            addressee = i_addressee,
            updusrnm = i_updusrnm,
            updpcnm = i_updpcnm
        WHERE membercd = i_membercd;

        errcd = 1;
        --errmsg = sql1;
        code = i_membercd;
        RETURN;

    -- 削除
    ELSIF kubun =3 THEN
        UPDATE t_consumer_attr
           SET delflg   = TRUE,
               updusrnm = i_updusrnm,
               updpcnm  = i_updpcnm
           WHERE membercd = i_membercd;

        errcd = 1;
        code = i_membercd;

        RETURN;
    END IF;
END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

