CREATE OR REPLACE FUNCTION f_seller_item_update(IN integer, IN integer, IN integer, IN varchar, IN varchar, OUT errcd integer, OUT errmsg character varying) AS
$BODY$

DECLARE
     _kubun ALIAS FOR $1;             -- 処理区分
     _itemcd ALIAS FOR $2;            -- 品目C
     _sellercd ALIAS FOR $3;          -- 出品者C

     _updusrnm ALIAS FOR $4;          -- 更新ユーザ名
     _updpcnm ALIAS FOR $5;           -- 更新マシン

     cntcheck integer;
BEGIN

    IF _kubun IS NULL OR _kubun NOT IN (1,2,3) THEN
        errmsg := '処理区分が不正です';
        errcd := -10;
        RETURN;
    END IF;
    
    IF _itemcd IS NULL THEN
        errmsg := '品目コードが指定されていません。';
        errcd := -10;
        RETURN;
    END IF;

    IF _sellercd IS NULL THEN
        errmsg := '出品者コードが指定されていません。';
        errcd := -10;
        RETURN;
    END IF;

    IF _updusrnm IS NULL THEN
        errmsg := '更新ユーザ名が指定されていません。';
        errcd := -10;
        RETURN;
    END IF;

    IF _updpcnm IS NULL THEN
        errmsg := '更新マシンが指定されていません。';
        errcd := -10;
        RETURN;
    END IF;

 -- 外部キーチェック --
    SELECT itemcd INTO cntcheck FROM t_item_basic_attr WHERE itemcd = _itemcd;
    IF  NOT FOUND THEN
        errmsg := '品目基本属性テーブルに存在しない品目コード';
        errcd := -10;
        RETURN;
    END IF;
    
    SELECT membercd INTO cntcheck FROM t_seller_attr WHERE membercd = _sellercd;
    IF  NOT FOUND THEN
        errmsg := '出品者テーブルに存在しない出品者コードがある';
        errcd := -10;
        RETURN;
    END IF;
    
    
    --
    -- 更新処理
    --

    -- 追加
    IF _kubun = 1 THEN
        INSERT INTO t_seller_item(sellercd, itemcd, updusrnm, updpcnm)
               VALUES(_sellercd, _itemcd, _updusrnm, _updpcnm);
        errcd := 1;
        RETURN;
        
    -- 更新
    ELSIF _kubun = 2 THEN
        errmsg := '出品者品目テーブルは更新不可';
        errcd := -10;
        RETURN;

    -- 削除
    ELSIF _kubun = 3 THEN
        UPDATE t_seller_item
           SET delflg = TRUE,
               updusrnm = _updusrnm,
               updpcnm = _updpcnm
         WHERE sellercd = _sellercd AND itemcd = _itemcd;
        errcd := 1;
        RETURN;
        
    END IF;

    RETURN;
END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
