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

DECLARE
     i_membercd 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_membercd 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 membercd INTO cntcheck FROM t_member_basic_attr WHERE membercd = i_membercd;
    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_genre_member where membercd = i_membercd;
    i := 1;
    LOOP
        INSERT INTO t_genre_member(membercd, genrecd, updusrnm, updpcnm) VALUES(i_membercd, i_genrecd[i], 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;