-- 商品ダウンロードテーブル 変更
--DROP FUNCTION f_dl_item_update();

CREATE OR REPLACE FUNCTION f_dl_item_update(
  IN kubun integer,
  IN _itemcd integer,
  IN _structcd integer,
  IN _fileexistence boolean,
  IN _dlcount integer,
  IN _dlperioddays integer,
  IN _comment text,

  IN usr character varying,
  IN ipaddr character varying,
  IN count integer,

  OUT errcd integer,
  OUT errmsg character varying,
  OUT code integer) AS
$BODY$

DECLARE
    sql1 varchar;
    sql2 varchar;
    cntcheck integer;
    makerc integer;
    labelc integer;
    MES_001 varchar := '品目コード' || _itemcd || 'は登録済みです';
    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 (2,3) THEN
        IF _structcd IS NULL THEN
            RAISE EXCEPTION '構成コードの引数は必須です';
        END IF;
        IF count IS NULL THEN
            RAISE EXCEPTION '更新カウンタの引数は必須です';
        END IF;
    END IF;
    IF kubun IN (1,2,3) THEN
        IF _itemcd IS NULL THEN
            RAISE EXCEPTION '品目コードの引数は必須です';
        END IF;
        IF _structcd IS NULL THEN
            RAISE EXCEPTION '構成コードの引数は必須です';
        END IF;
        IF usr IS NULL THEN
            RAISE EXCEPTION '更新ユーザが指定されていません';
        END IF;
    END IF;

    -- 更新マシン(IPアドレス)のチェックはとりあえずしない

    -- 存在チェック
    IF kubun IN (2,3) THEN
        SELECT itemcd INTO cntcheck FROM t_dl_item WHERE itemcd = _itemcd AND structcd = _structcd;
        IF NOT FOUND THEN
            RAISE EXCEPTION 'その品目コードと構成コードのレコードは存在しません';
        END IF;
    END IF;


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


 ---更新処理 ---


    IF kubun = 1 THEN
        -- 追加
        INSERT INTO t_dl_item(
            itemcd,
            structcd,
            fileexistence,
            dlcount,
            dlperioddays,
            comment,

            
            updusrnm,
            updpcnm
        ) VALUES (
            _itemcd,
            _structcd,
            _fileexistence,
            _dlcount,
            _dlperioddays,
            _comment,
            
            usr,
            ipaddr
        );
         
         errcd := 1;
         RETURN;
         
    ELSIF kubun = 2 THEN
        UPDATE t_dl_item
          SET fileexistence = _fileexistence,
            dlcount = _dlcount,
            dlperioddays = _dlperioddays,
            comment = _comment,
            updusrnm = usr,
            updpcnm = ipaddr
          WHERE itemcd = _itemcd AND structcd = _structcd;
          
        errcd := 1;
        code := _itemcd;
        RETURN;
    END IF;
END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;