-- 品目ウェブ属性テーブル 変更
CREATE OR REPLACE FUNCTION f_item_web_attf_update(IN integer, IN integer, IN date, IN integer, IN character varying, IN character varying, IN character varying, IN integer, OUT errcd integer, OUT errmsg character varying) AS
$BODY$
DECLARE
    kubun ALIAS FOR $1;               -- 区分
    i_itemcd ALIAS FOR $2;            -- 品目コード
    i_releasedate ALIAS FOR $3;       -- 公開日
    i_rankingrate ALIAS FOR $4;       -- ランク
    i_comment ALIAS FOR $5;           -- コメント

    i_updusrnm ALIAS FOR $6;         -- 更新ユーザ名
    i_updpcnm ALIAS FOR $7;          -- 更新マシン名
    i_updcnt ALIAS FOR $8;           -- 更新カウンタ

    cntcheck integer;
BEGIN

-- 必須チェック --

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

    IF i_itemcd IS NULL THEN
        RAISE EXCEPTION '品目コードの引数は必須です';
    END IF;

    IF kubun IN (2,3) THEN
        IF i_updcnt IS NULL THEN
            RAISE EXCEPTION '更新カウンタの引数は必須です';
        END IF;
    END IF;

    IF kubun IN (1) THEN
        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 itemcd INTO cntcheck FROM t_item_web_attr WHERE itemcd = i_itemcd;
          IF NOT FOUND THEN
            RAISE EXCEPTION 'その品目コードのレコードは存在しません';
        END IF;
    END IF;

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

 ---  更新処理 ---

    IF kubun = 1 THEN
        -- 追加
        INSERT INTO t_item_web_attr(
            itemcd,   releasedate,   rankingrate,   comment,   updusrnm,   updpcnm)
        VALUES(
          i_itemcd, i_releasedate, i_rankingrate, i_comment, i_updusrnm, i_updpcnm);

        errcd := 1;
        RETURN;

    -- 変更
    ELSIF kubun = 2 THEN
        -- 更新ユーザ
        UPDATE t_item_web_attr SET
          releasedate = i_releasedate,
          rankingrate = i_rankingrate,
          comment = i_comment,
          updusrnm = i_updusrnm,
          updpcnm= i_updpcnm
        WHERE itemcd= i_itemcd;

        errcd := 1;
        RETURN;

    -- 削除
    ELSIF kubun =3 THEN
        UPDATE t_item_web_attr
           SET delflg   = TRUE,
               updusrnm = i_updusrnm,
               updpcnm  = i_updpcnm
           WHERE itemcd = i_itemcd;

        errcd := 1;

        RETURN;
    END IF;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

