CREATE OR REPLACE FUNCTION f_import_cast(
    IN _castcd integer,         -- キャストC
    IN _castnm varchar,         -- キャスト名
    IN _castnmkana varchar,     -- キャスト名かな
    IN _castdivcd integer,      -- キャスト種別C
    IN _castdivnm varchar,      -- キャスト種別名
    IN _recommenddiv integer,   -- お勧め区分
    IN _comment varchar,        -- コメント
    IN _debutdate varchar,      -- デビュー年月
    IN _birthplacecd integer,   -- 出身C
    IN _birthplacenm varchar,   -- 出身名
    IN _birthdate    varchar,   -- 生年月日
    IN _shopdiv integer,    -- 区分
    IN usr varchar,

    OUT errcd integer,
    OUT errmsg varchar,
    OUT code integer) AS
$BODY$

DECLARE
    castc integer;
    _castdiv integer;
    _prefcd  integer;
BEGIN
    -- 必須チェック
    IF _castcd IS NOT NULL THEN
        errcd := -10;
        errmsg := '変更はできません';
        RETURN;
    END IF;

    IF usr IS NULL THEN
        errcd := -10;
        errmsg := '更新ユーザは必須です';
        RETURN;
    END IF;

    IF _castnm IS NULL THEN
        errcd := -10;
        errmsg := 'キャスト名は必須です';
        RETURN;
    END IF;

    IF _castnmkana IS NULL THEN
        errcd := -10;
        errmsg := 'キャスト名かなは必須です';
        RETURN;
    END IF;

    -- キャスト種別C取得
    IF _castdivcd IS NULL AND _castdivnm IS NULL THEN
        errcd := -10;
        errmsg := 'キャスト種別は必須です';
        RETURN;
    ELSIF _castdivcd IS NOT NULL THEN
        SELECT namecd INTO _castdiv FROM t_name WHERE namediv = 6 AND namecd = _castdivcd;
        IF NOT FOUND THEN
            errcd := -10;
            errmsg := 'キャスト種別Cが不正です';
            RETURN;
        END IF;
    ELSIF _castdivnm IS NOT NULL THEN
        SELECT namecd INTO _castdiv FROM t_name WHERE namediv = 6 AND name LIKE _castdivnm;
        IF NOT FOUND THEN
            errcd := -10;
            errmsg := 'キャスト種別名が不正です';
            RETURN;
        END IF;
    END IF;

    IF _shopdiv IS NULL OR _shopdiv NOT IN (1,2) THEN
        errcd := -10;
        errmsg := '区分が不正です';
        RETURN;
    END IF;

    -- 出身C取得
    IF _birthplacecd IS NOT NULL THEN
        SELECT prefcd INTO _prefcd FROM t_pref WHERE prefcd = _birthplacecd;
        IF NOT FOUND THEN
            errcd := -10;
            errmsg := '出身Cが不正です';
            RETURN;
        END IF;
    ELSIF _birthplacenm IS NOT NULL THEN
        SELECT prefcd INTO _prefcd FROM t_pref WHERE prefnm LIKE _birthplacenm OR prefnm LIKE _birthplacenm || '県';
        IF NOT FOUND THEN
            errcd := -10;
            errmsg := '出身名が不正です';
            RETURN;
        END IF;
    END IF;

    -- キャスト名の重複チェック
    SELECT castcd INTO castc FROM t_cast
	   WHERE castdiv = _castdiv AND castnm LIKE _castnm AND shopdiv = _shopdiv AND delflg = FALSE;
    IF FOUND THEN
        errcd := -20;
        errmsg := _castnm || 'は既に存在します。';
        RETURN;
    END IF;


    INSERT INTO t_cast( castnm,  castnmkana,  castdiv,  recommenddiv,  comment,  debutdate,  birthplacecd,  birthdate, shopdiv, updusrnm)
                VALUES(_castnm, _castnmkana, _castdiv, _recommenddiv, _comment, _debutdate, _prefcd,       _birthdate, _shopdiv, usr);

    -- 追加したキャストCを返却
    errcd := 1;
    errmsg := '完了';
    code := lastval();
    RETURN;

END;

$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
