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

DECLARE
     i_preitemcd ALIAS FOR $1;          -- 仮品目C
     i_genrecd ALIAS FOR $2;            -- ジャンルC

     i_updusrnm ALIAS FOR $3;          -- 更新ユーザ名
     i_updpcnm ALIAS FOR $4;           -- 更新マシン

     i        integer;
     cntcheck integer;
BEGIN

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

    IF i_genrecd 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 preitemcd INTO cntcheck FROM t_pre_item_attr WHERE preitemcd = i_preitemcd;
    IF  NOT FOUND THEN
        errmsg := '品目基本属性テーブルに存在しない品目コード';
        errcd := -10;
        RETURN;
    END IF;

    i := 1;
    LOOP
        SELECT genrecd INTO cntcheck FROM t_genre WHERE genrecd = i_genrecd[i];
        IF  NOT FOUND THEN
            errmsg := 'ジャンルテーブルに存在しないジャンルコードがある';
            errcd := -10;
            RETURN;
        END IF;

        i := i + 1;
        IF i_genrecd[i] IS NULL THEN
            EXIT;
        END IF;
    END LOOP;

 -- 更新処理 --
    delete from t_pre_genre_item where preitemcd = i_preitemcd;
    i := 1;
    LOOP
        INSERT INTO t_pre_genre_item(genrecd, preitemcd, updusrnm, updpcnm) VALUES(i_genrecd[i], i_preitemcd, i_updusrnm, i_updpcnm);
        i := i + 1;
        IF i_genrecd[i] IS NULL THEN
            EXIT;
        END IF;
    END LOOP;
    errcd := 1;
    RETURN;
END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;