DROP FUNCTION f_cast_item_update_one(IN integer, IN integer, IN integer, IN integer, IN character varying, IN character varying, IN integer, OUT errcd integer, OUT errmsg character varying);

CREATE OR REPLACE FUNCTION f_cast_item_update_one(IN integer, IN integer, IN integer, IN integer, 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;            -- 品目C
    i_castcd ALIAS FOR $3;            -- キャストC
    i_disppriority ALIAS FOR $4;            -- 表示順

    i_updusrnm ALIAS FOR $5;          -- 更新ユーザ名
    i_updpcnm ALIAS FOR $6;           -- 更新マシン
    i_updcnt ALIAS FOR $7;           -- 更新マシン

    cntcheck integer;
BEGIN

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

    IF i_castcd IS NULL THEN
        errmsg := 'キャストコードが指定されていません。';
        errcd := -10;
        RETURN;
    END IF;

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

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

 -- 存在チェック --
    SELECT castcd INTO cntcheck FROM t_cast_item WHERE itemcd = i_itemcd AND castcd = i_castcd;
    IF kubun = 2 AND NOT FOUND THEN
        errmsg := 'キャスト品目テーブルに存在しない';
        errcd := -10;
        RETURN;
    END IF;


 -- 外部キーチェック --
    SELECT itemcd INTO cntcheck FROM t_item_basic_attr WHERE itemcd = i_itemcd;
    IF NOT FOUND THEN
        errmsg := '品目基本属性テーブルに存在しない品目コード';
        errcd := -10;
        RETURN;
    END IF;

    SELECT castcd INTO cntcheck FROM t_cast WHERE castcd = i_castcd;
    IF  NOT FOUND THEN
        errmsg := 'キャストテーブルに存在しないキャストコード';
        errcd := -10;
        RETURN;
    END IF;

 -- 更新処理 --
    IF kubun = 1 THEN
        SELECT castcd INTO cntcheck FROM t_cast_item WHERE itemcd = i_itemcd AND castcd = i_castcd;
        IF FOUND THEN
            -- 更新
            UPDATE t_cast_item
               SET delflg   = FALSE,
                   disppriority = i_disppriority,
                   updusrnm = i_updusrnm,
                   updpcnm  = i_updpcnm
             WHERE itemcd = i_itemcd AND castcd = i_castcd;
            errcd := 1;
            RETURN;
        ELSEIF NOT FOUND THEN
            -- 追加
            INSERT INTO t_cast_item (castcd, itemcd, disppriority, updusrnm, updpcnm)
                   VALUES(i_castcd, i_itemcd, i_disppriority, i_updusrnm, i_updpcnm);
            errcd := 1;
            RETURN;
        END IF;

    ELSIF kubun = 2 THEN
        -- 削除
        UPDATE t_cast_item
           SET delflg   = TRUE,
               updusrnm = i_updusrnm,
               updpcnm  = i_updpcnm
           WHERE itemcd = i_itemcd AND castcd = i_castcd;

        errcd := 1;
        RETURN;
    END IF;

END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;