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

DECLARE
     i_itemcd ALIAS FOR $1;            -- 品目C
     i_castcd ALIAS FOR $2;            -- キャストC

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

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

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

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

 -- 更新処理 --
    delete from t_cast_item where itemcd = i_itemcd;
    i := 1;
    LOOP
        INSERT INTO t_cast_item(castcd, itemcd, updusrnm, updpcnm) VALUES(i_castcd[i], i_itemcd, i_updusrnm, i_updpcnm);
        i := i + 1;
        IF i_castcd[i] IS NULL THEN
            EXIT;
        END IF;
    END LOOP;
    errcd := 1;
    RETURN;
END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;