pl/sql csv作成

CREATE OR REPLACE PROCEDURE      A_SRE_1210
/*******************************************************************************
    **  プロシジャ名    :調達仕入先連携(WorksPro→楽々)
    **  プロシジャID    :A_SRE_1210
    **  機能概要        :WorksProシステムから楽々システムへ調達仕入先情報を連携する日次ジョブである。
    **  パラメータ      :会社コード
    **                  :CSV出力パス
    **                  :CSVのファイル名1
    **                  :CSVのファイル名2
    **                  :CSVのファイル名3
    **                  :リトライ回数
    **                  :SLEEP時間
    **                  :戻り値
    **                  :エラーコード
    **                  :エラーメッセージ
    **                  :エラー発生した主キーデータ
    **                  :処理開始時間
    **                  :処理終了時間
    ***************************************************************************/
    (
 INCOMP_CD  IN CHAR, /* 会社コード */
 PPATH   IN VARCHAR2, /* CSV出力パス */
 FILE1   IN VARCHAR2, /* CSVのファイル名1 */
 FILE2   IN VARCHAR2, /* CSVのファイル名2 */
 FILE3   IN VARCHAR2, /* CSVのファイル名3 */
 RETRYCNT  IN NUMBER, /* リトライ回数 */
 SLEEPTIME  IN NUMBER, /* SLEEP時間 */
 RETURN_CD  OUT NUMBER, /* 戻り値 */
 CD   OUT VARCHAR2, /* エラーコード */
 MESSAGE   OUT VARCHAR2, /* エラーメッセージ */
 ERROR_DATA              OUT VARCHAR2, /* エラー発生した主キーデータ */
 START_TIME  OUT VARCHAR2, /* 処理開始時間 */
 END_TIME  OUT VARCHAR2 /* 処理終了時間 */
    )
    AUTHID CURRENT_USER IS
    -- *************************************************************************
    -- *** 変数宣言部
    -- *************************************************************************
    WK_SQL          VARCHAR2(30000);
    STR    VARCHAR2(30000);
    FCSVHANDLE   UTL_FILE.FILE_TYPE;  --取引先書類のハンドルを書く
    FWINHANDLE   UTL_FILE.FILE_TYPE;  --取引先窓口書類のハンドルを書く
    FPAYHANDLE   UTL_FILE.FILE_TYPE;  --取引先・支払条件書類のハンドルを書く
    OUT_COMP_CD                 M_SUPL.COMP_CD%TYPE;            --会社コード
    OUT_SUPL_CD                 M_SUPL.SUPL_CD%TYPE;            --仕入先コード
    OUT_PYMT_SUPL_CD            M_SUPL.PYMT_SUPL_CD%TYPE;       --支払先コード
    OUT_SUPL_NM                 M_SUPL.SUPL_NM%TYPE;            --仕入先名称
    OUT_SUPL_SHORT_NM           M_SUPL.SUPL_SHORT_NM%TYPE;      --仕入先略称
    OUT_SUPL_WINDOW_NM          M_SUPL.SUPL_WINDOW_NM%TYPE;     --仕入先窓口名称
    CSV_SUPL_NM   M_SUPL_CSV.SUPL_NM%TYPE;
    CSV_SUPL_SHORT_NM  M_SUPL_CSV.SUPL_SHORT_NM%TYPE;
    CSV_SUPL_WINDOW_NM  M_SUPL_WINDOW_CSV.SUPL_WINDOW_NM%TYPE;
    CSV_SUPL_ADDRESS1  M_SUPL_WINDOW_CSV.SUPL_ADD1%TYPE;
    OUT_SUPL_ZIP                M_SUPL.SUPL_ZIP%TYPE;           --仕入先郵便番号
    OUT_SUPL_ADDRESS1           M_SUPL.SUPL_ADDRESS1%TYPE;      --仕入先住所
    OUT_SUPL_PHONE              M_SUPL.SUPL_PHONE%TYPE;         --仕入先電話番号
    OUT_SUPL_FAX                M_SUPL.SUPL_FAX%TYPE;           --仕入先FAX
    OUT_UPDATE_TIME             M_SUPL.UPDATE_DATETIME%TYPE;    --更新日時
    OUT_PYMT_TERMS_CD  M_PYMT_SUPL.PYMT_TERMS_CD%TYPE; --支払条件コード
   
    V_UPDATE_TIME    M_SUPL_CSV.LATEST_UPDATE_DATETIME%TYPE;
    V_SUPL_CSV   M_SUPL_CSV%ROWTYPE;  --取引先CSV作成済ROWTYPE
    V_SUPL_WINDOW_CSV  M_SUPL_WINDOW_CSV%ROWTYPE;      --取引先窓口CSV作成済ROWTYPE
    V_PAY_CONDITIONS_CSV M_PAY_CONDITIONS_CSV%ROWTYPE;   --取引先・支払条件CSV作成済ROWTYPE

    V_SUPL_CSV_NUM  NUMBER := 0;   --取引先CSV作成済処理件数
    V_SUPL_WIN_NUM  NUMBER := 0;   --取引先窓口CSV作成済処理件数
    V_PAY_COND_NUM  NUMBER := 0;   --取引先・支払条件CSV作成済処理件数
    V_ERR_TABLE   VARCHAR2(50);   --エラー発生したテーブル
    V_ERR_KEY   VARCHAR2(300);   --エラー発生した主キー

    FILE1_EXIST_FLG  BOOLEAN;   --ファイルが存在flag
    FILE2_EXIST_FLG  BOOLEAN;   --ファイルが存在flag
    FILE3_EXIST_FLG  BOOLEAN;   --ファイルが存在flag
    FLENGTH    NUMBER;
    BSIZE   BINARY_INTEGER;
    -- *************************************************************************
    -- *** 定数宣言部
    -- *************************************************************************
    C_USER_ID       CONSTANT CHAR(10) := '9999999999';
    C_PROGRAM_ID      CONSTANT CHAR(10) := 'A_SRE_1210';
    C_WINDOW_CD       CONSTANT CHAR(2) := '01';
    C_TITLE_KBN       CONSTANT CHAR(1) := '3';
    C_SUB_CONTRACT_CLASS     CONSTANT CHAR(1) := '0';
    C_SUPL_CD_LEN      CONSTANT NUMBER(2) := 10;
    C_NM_LEN           CONSTANT NUMBER(3) := 120;
    C_SUPLSHORTNM_LEN      CONSTANT NUMBER(2) := 60;
    C_CSV_NM_LEN      CONSTANT NUMBER(2) := 40;
    C_CSV_SHORTNM_LEN      CONSTANT NUMBER(2) := 20;
    C_SUPLZIP_LEN      CONSTANT NUMBER(1) := 8;

    -- *************************************************************************
    --  基本情報 仕入先を検索CURSOR
    -- *************************************************************************
    CURSOR CUR_SEL_SUPL IS
    SELECT
    M_SUPL.COMP_CD,
    SUPL_CD,
    M_SUPL.PYMT_SUPL_CD,
    SUPL_NM,
    SUPL_SHORT_NM,
    SUPL_WINDOW_NM,
    SUPL_ZIP,
    SUPL_ADDRESS1,
    SUPL_PHONE,
    SUPL_FAX,
    DECODE(M_SUPL.UPDATE_DATETIME,NULL,M_SUPL.INSERT_DATETIME,M_SUPL.UPDATE_DATETIME) UPDATE_DATETIME,
    PYMT_TERMS_CD
    FROM
    M_SUPL,
    M_PYMT_SUPL
    WHERE
    M_SUPL.COMP_CD = INCOMP_CD
    AND M_SUPL.COMP_CD = M_PYMT_SUPL.COMP_CD
    AND M_SUPL.PYMT_SUPL_CD = M_PYMT_SUPL.PYMT_SUPL_CD;

    -- ************************************************************************
    --  基本情報 取引先CSV作成済の取引先コードを検索CURSOR
    -- ************************************************************************
    CURSOR CUR_SEL_M_SUPL_CSV(V_SUPL_CD VARCHAR2) IS
    SELECT
    LATEST_UPDATE_DATETIME
    FROM
    M_SUPL_CSV
    WHERE
    M_SUPL_CSV.COMP_CD = INCOMP_CD
    AND RTRIM(M_SUPL_CSV.SUPL_CD) = RTRIM(V_SUPL_CD);

    -- ************************************************************************
    --  基本情報 取引先CSV作成済の取引先コードを削除検索CURSOR
    -- ************************************************************************
    CURSOR CUR_DEL_M_SUPL_CSV IS
    SELECT
    *
    FROM
    M_SUPL_CSV
    WHERE
    M_SUPL_CSV.COMP_CD = INCOMP_CD
    AND RTRIM(M_SUPL_CSV.SUPL_CD) NOT IN (
     SELECT
        RTRIM(M_SUPL_CSV.SUPL_CD)
        FROM
 M_SUPL_CSV,
        M_SUPL
 WHERE
 M_SUPL.SUPL_CD LIKE M_SUPL_CSV.SUPL_CD || '%'
     );

    -- *************************************************************************
    --  基本情報 取引先窓口CSV作成済の取引先コードを検索CURSOR
    -- *************************************************************************
    CURSOR CUR_SEL_M_SUPL_WINDOW_CSV(V_SUPL_CD VARCHAR2) IS
    SELECT
    LATEST_UPDATE_DATETIME
    FROM
    M_SUPL_WINDOW_CSV
    WHERE
    M_SUPL_WINDOW_CSV.COMP_CD = INCOMP_CD
    AND RTRIM(M_SUPL_WINDOW_CSV.SUPL_CD) = RTRIM(V_SUPL_CD);

    -- *************************************************************************
    --  基本情報 取引先窓口CSV作成済の取引先コードを削除検索CURSOR
    -- *************************************************************************
    CURSOR CUR_DEL_M_SUPL_WINDOW_CSV IS
    SELECT
    *
    FROM
    M_SUPL_WINDOW_CSV
    WHERE
    M_SUPL_WINDOW_CSV.COMP_CD = INCOMP_CD
    AND RTRIM(M_SUPL_WINDOW_CSV.SUPL_CD) NOT IN (
     SELECT
        RTRIM(M_SUPL_WINDOW_CSV.SUPL_CD)
        FROM
 M_SUPL_WINDOW_CSV,
        M_SUPL
 WHERE
 M_SUPL.SUPL_CD LIKE M_SUPL_WINDOW_CSV.SUPL_CD || '%'
     );

    -- *************************************************************************
    --  基本情報 取引先・支払条件CSV作成済の取引先コードを検索CURSOR
    -- *************************************************************************
    CURSOR CUR_SEL_M_PAY_CONDITIONS_CSV(V_SUPL_CD VARCHAR2,V_PYMT_TERMS_CD VARCHAR2) IS
    SELECT
    LATEST_UPDATE_DATETIME
    FROM
    M_PAY_CONDITIONS_CSV
    WHERE
    M_PAY_CONDITIONS_CSV.COMP_CD = INCOMP_CD
    AND RTRIM(M_PAY_CONDITIONS_CSV.SUPL_CD) = RTRIM(V_SUPL_CD)
    AND RTRIM(M_PAY_CONDITIONS_CSV.PAY_CONDITION_CODE) = RTRIM(V_PYMT_TERMS_CD);

    -- *************************************************************************
    --  基本情報 取引先・支払条件CSV作成済の取引先コードを削除検索CURSOR
    -- *************************************************************************
    CURSOR CUR_DEL_M_PAY_CONDITIONS_CSV IS
    SELECT
    *
    FROM
    M_PAY_CONDITIONS_CSV
    WHERE
    M_PAY_CONDITIONS_CSV.COMP_CD = INCOMP_CD
    AND RTRIM(M_PAY_CONDITIONS_CSV.SUPL_CD) NOT IN (
     SELECT
        RTRIM(M_PAY_CONDITIONS_CSV.SUPL_CD)
        FROM
 M_PAY_CONDITIONS_CSV,
        M_SUPL
 WHERE
 M_SUPL.SUPL_CD LIKE M_PAY_CONDITIONS_CSV.SUPL_CD || '%'
     );

    -- *************************************************************************
    -- *** 機能名称:取引先CSV作成済挿入SQL文
    -- *** 戻り値:SQL文
    -- *** 機能説明:
    -- *************************************************************************
    FUNCTION GET_INS_SUPL_CSV RETURN VARCHAR2 IS
    BEGIN
     WK_SQL := '';
 WK_SQL := WK_SQL || ' INSERT INTO M_SUPL_CSV              ';
 WK_SQL := WK_SQL || ' VALUES('                 ;
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_COMP_CD) || '''           ,'; --会社コード
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_SUPL_CD) || '''           ,'; --取引先コード
 WK_SQL := WK_SQL || ' ''' || RTRIM(REPLACE(OUT_SUPL_NM,'''','''''')) || '''    ,'; --取引先名称
 WK_SQL := WK_SQL || ' ''' || RTRIM(REPLACE(OUT_SUPL_SHORT_NM,'''','''''')) || ''' ,'; --取引先略称
 WK_SQL := WK_SQL || ' ''' || OUT_UPDATE_TIME || '''              ,'; --最新更新時間
 WK_SQL := WK_SQL || ' ''' || C_USER_ID || '''                    ,'; --登録ユーザID
 WK_SQL := WK_SQL || ' ''' || C_PROGRAM_ID || '''                 ,'; --登録プログラムID
 WK_SQL := WK_SQL || '  SYSDATE               ,'; --作成日時
 WK_SQL := WK_SQL || ' NULL               ,'; --更新ユーザID
 WK_SQL := WK_SQL || ' NULL               ,'; --更新プログラムID
 WK_SQL := WK_SQL || ' NULL)                '; --更新日時
 RETURN WK_SQL;
    END GET_INS_SUPL_CSV;

    -- *************************************************************************
    -- *** 機能名称:取引先CSV作成済更新SQL文
    -- *** 戻り値:SQL文
    -- *** 機能説明:
    -- *************************************************************************
    FUNCTION GET_UPD_SUPL_CSV RETURN VARCHAR2 IS
    BEGIN
 WK_SQL := '';
 WK_SQL := WK_SQL || ' UPDATE M_SUPL_CSV           ';
 WK_SQL := WK_SQL || ' SET             ';
 WK_SQL := WK_SQL || ' SUPL_NM = ''' || RTRIM(REPLACE(OUT_SUPL_NM,'''','''''')) || '''   ,'; --取引先名称
 WK_SQL := WK_SQL || ' SUPL_SHORT_NM = ''' || RTRIM(REPLACE(OUT_SUPL_SHORT_NM,'''','''''')) || '''   ,'; --取引先略称
 WK_SQL := WK_SQL || ' LATEST_UPDATE_DATETIME = ''' || OUT_UPDATE_TIME || '''     ,'; --最新更新時間
 WK_SQL := WK_SQL || ' UPDATE_USER_ID = ''' || C_USER_ID || '''         ,'; --更新ユーザID
 WK_SQL := WK_SQL || ' UPDATE_PRG_ID = ''' || C_PROGRAM_ID || '''         ,'; --更新プログラムID
 WK_SQL := WK_SQL || ' UPDATE_DATETIME = SYSDATE             '; --更新日時
 WK_SQL := WK_SQL || ' WHERE            ';
 WK_SQL := WK_SQL || ' RTRIM(COMP_CD) = ''' || RTRIM(OUT_COMP_CD) || '''       ';
 WK_SQL := WK_SQL || ' AND RTRIM(SUPL_CD) = ''' || RTRIM(OUT_SUPL_CD) || '''       ';
 RETURN WK_SQL;
    END GET_UPD_SUPL_CSV;

    -- *************************************************************************
    -- *** 機能名称:取引先CSV作成済削除SQL文
    -- *** 戻り値:SQL文
    -- *** 機能説明:
    -- *************************************************************************
    FUNCTION GET_DEL_SUPL_CSV RETURN VARCHAR2 IS
    BEGIN
 WK_SQL := '';
 WK_SQL := WK_SQL || ' DELETE FROM M_SUPL_CSV         ';
 WK_SQL := WK_SQL || ' WHERE           ';
 WK_SQL := WK_SQL || ' RTRIM(COMP_CD) = ''' || RTRIM(V_SUPL_CSV.COMP_CD) || ''' ';
 WK_SQL := WK_SQL || ' AND RTRIM(SUPL_CD) = ''' || RTRIM(V_SUPL_CSV.SUPL_CD) || '''  ';
 RETURN WK_SQL;
    END GET_DEL_SUPL_CSV;

    -- *************************************************************************
    -- *** 機能名称:取引先窓口CSV作成済挿入SQL文
    -- *** 戻り値:SQL文
    -- *** 機能説明:
    -- *************************************************************************
    FUNCTION GET_INS_SUPL_WINDOW_CSV RETURN VARCHAR2 IS
    BEGIN
 WK_SQL := '';
 WK_SQL := WK_SQL || ' INSERT INTO M_SUPL_WINDOW_CSV     ';
 WK_SQL := WK_SQL || ' VALUES(        ';
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_COMP_CD) || '''    ,'; --会社コード
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_SUPL_CD) || '''    ,'; --取引先コード
 WK_SQL := WK_SQL || ' ''' || C_WINDOW_CD || '''     ,'; --取引先窓口コード
 WK_SQL := WK_SQL || ' '' ''        ,'; --部署名称
 WK_SQL := WK_SQL || ' ''' || RTRIM(REPLACE(OUT_SUPL_WINDOW_NM,'''','''''')) || ''' ,'; --窓口名称
 WK_SQL := WK_SQL || ' ''' || C_TITLE_KBN || '''     ,'; --敬称区分
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_SUPL_ZIP) || '''    ,'; --郵便番号
 WK_SQL := WK_SQL || ' ''' || RTRIM(REPLACE(OUT_SUPL_ADDRESS1,'''','''''')) || ''' ,'; --住所1
 WK_SQL := WK_SQL || ' NULL        ,'; --住所2
 WK_SQL := WK_SQL || ' NULL        ,'; --住所3
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_SUPL_PHONE) || '''    ,'; --電話番号
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_SUPL_FAX) || '''    ,'; --FAX番号
 WK_SQL := WK_SQL || ' '' ''        ,'; --メールアドレス
 WK_SQL := WK_SQL || ' 1        ,'; --通知形態
 WK_SQL := WK_SQL || ' 0        ,'; --メール通知
 WK_SQL := WK_SQL || ' 1        ,'; --インターネット接続
 WK_SQL := WK_SQL || ' ''' || OUT_UPDATE_TIME || '''              ,'; --最新更新時間
 WK_SQL := WK_SQL || ' ''' || C_USER_ID || '''              ,'; --登録ユーザID
 WK_SQL := WK_SQL || ' ''' || C_PROGRAM_ID || '''              ,'; --登録プログラムID
 WK_SQL := WK_SQL || ' SYSDATE                        ,'; --作成日時
 WK_SQL := WK_SQL || ' NULL               ,'; --更新ユーザID
 WK_SQL := WK_SQL || ' NULL               ,'; --更新プログラムID
 WK_SQL := WK_SQL || ' NULL)                 '; --更新日時
 RETURN WK_SQL;
    END GET_INS_SUPL_WINDOW_CSV;

    -- *************************************************************************
    -- *** 機能名称:取引先窓口CSV作成済更新SQL文
    -- *** 戻り値:SQL文
    -- *** 機能説明:
    -- *************************************************************************
    FUNCTION GET_UPD_SUPL_WINDOW_CSV RETURN VARCHAR2 IS
    BEGIN
 WK_SQL := '';
 WK_SQL := WK_SQL || ' UPDATE M_SUPL_WINDOW_CSV          ';
 WK_SQL := WK_SQL || ' SET                ';
 WK_SQL := WK_SQL || ' SUPL_WINDOW_NM = ''' || RTRIM(REPLACE(OUT_SUPL_WINDOW_NM,'''','''''')) || ''' ,'; --窓口名称
 WK_SQL := WK_SQL || ' SUPL_ZIP = ''' || RTRIM(OUT_SUPL_ZIP) || '''     ,'; --郵便番号
 WK_SQL := WK_SQL || ' SUPL_ADD1 = ''' || RTRIM(REPLACE(OUT_SUPL_ADDRESS1,'''','''''')) || '''  ,'; --住所1
 WK_SQL := WK_SQL || ' SUPL_TEL = ''' || RTRIM(OUT_SUPL_PHONE) || '''     ,'; --電話番号
 WK_SQL := WK_SQL || ' SUPL_FAX = ''' || RTRIM(OUT_SUPL_FAX) || '''     ,'; --FAX番号
 WK_SQL := WK_SQL || ' LATEST_UPDATE_DATETIME = ''' || OUT_UPDATE_TIME || '''     ,'; --最新更新時間
 WK_SQL := WK_SQL || ' UPDATE_USER_ID = ''' || C_USER_ID || '''         ,'; --更新ユーザID
 WK_SQL := WK_SQL || ' UPDATE_PRG_ID = ''' || C_PROGRAM_ID || '''         ,'; --更新プログラムID
 WK_SQL := WK_SQL || ' UPDATE_DATETIME = SYSDATE            '; --更新日時
 WK_SQL := WK_SQL || ' WHERE              ';
 WK_SQL := WK_SQL || ' RTRIM(COMP_CD) = ''' || RTRIM(OUT_COMP_CD) || '''     ';
 WK_SQL := WK_SQL || ' AND RTRIM(SUPL_CD) = ''' || RTRIM(OUT_SUPL_CD) || '''      ';
 WK_SQL := WK_SQL || ' AND RTRIM(SUPL_WINDOW_CD) = ''01''        ';
 RETURN WK_SQL;
    END GET_UPD_SUPL_WINDOW_CSV;

    -- *************************************************************************
    -- *** 機能名称:取引先窓口CSV作成済削除SQL文
    -- *** 戻り値:SQL文
    -- *** 機能説明:
    -- *************************************************************************
    FUNCTION GET_DEL_SUPL_WINDOW_CSV RETURN VARCHAR2 IS
    BEGIN
 WK_SQL := '';
 WK_SQL := WK_SQL || ' DELETE FROM M_SUPL_WINDOW_CSV               ';
 WK_SQL := WK_SQL || ' WHERE                  ';
 WK_SQL := WK_SQL || ' RTRIM(COMP_CD) = ''' || RTRIM(V_SUPL_WINDOW_CSV.COMP_CD) || '''          ';
 WK_SQL := WK_SQL || ' AND RTRIM(SUPL_CD) = ''' || RTRIM(V_SUPL_WINDOW_CSV.SUPL_CD) || '''      ';
 WK_SQL := WK_SQL || ' AND RTRIM(SUPL_WINDOW_CD) = ''' || RTRIM(V_SUPL_WINDOW_CSV.SUPL_WINDOW_CD) || ''' ';
 RETURN WK_SQL;
    END GET_DEL_SUPL_WINDOW_CSV;

    -- *************************************************************************
    -- *** 機能名称:取引先・支払条件CSV作成済挿入SQL文
    -- *** 戻り値:SQL文
    -- *** 機能説明:
    -- *************************************************************************
    FUNCTION GET_INS_PAY_CONDITIONS_CSV RETURN VARCHAR2 IS
    BEGIN
 WK_SQL := '';
 WK_SQL := WK_SQL || ' INSERT INTO M_PAY_CONDITIONS_CSV  ';
 WK_SQL := WK_SQL || ' VALUES(';
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_COMP_CD) || ''' ,'; --会社コード
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_SUPL_CD) || ''' ,'; --取引先コード
 WK_SQL := WK_SQL || ' ''' || RTRIM(OUT_PYMT_TERMS_CD) || ''' ,'; --支払条件コード
 WK_SQL := WK_SQL || ' ''' || C_SUB_CONTRACT_CLASS || ''' ,'; --下請種別
 WK_SQL := WK_SQL || ' ''' || OUT_UPDATE_TIME || '''           ,'; --最新更新時間
 WK_SQL := WK_SQL || ' ''' || C_USER_ID || '''           ,'; --登録ユーザID
 WK_SQL := WK_SQL || ' ''' || C_PROGRAM_ID || '''           ,'; --登録プログラムID
 WK_SQL := WK_SQL || ' SYSDATE                    ,'; --作成日時
 WK_SQL := WK_SQL || ' NULL            ,'; --更新ユーザID
 WK_SQL := WK_SQL || ' NULL            ,'; --更新プログラムID
 WK_SQL := WK_SQL || ' NULL)             '; --更新日時
 RETURN WK_SQL;
    END GET_INS_PAY_CONDITIONS_CSV;

    -- *************************************************************************
    -- *** 機能名称:取引先・支払条件CSV作成済更新SQL文
    -- *** 戻り値:SQL文
    -- *** 機能説明:
    -- *************************************************************************
    FUNCTION GET_UPD_PAY_CONDITIONS_CSV RETURN VARCHAR2 IS
    BEGIN
 WK_SQL := '';
 WK_SQL := WK_SQL || ' UPDATE M_PAY_CONDITIONS_CSV          ';
 WK_SQL := WK_SQL || ' SET              ';
 WK_SQL := WK_SQL || ' SUPL_CD = ''' || RTRIM(OUT_SUPL_CD) || '''          ,'; --取引先コード
 WK_SQL := WK_SQL || ' PAY_CONDITION_CODE = ''' || RTRIM(OUT_PYMT_TERMS_CD) || '''     ,'; --支払条件コード
 WK_SQL := WK_SQL || ' SUB_CONTRACT_CLASS = ''' || C_SUB_CONTRACT_CLASS || '''         ,'; --下請種別
 WK_SQL := WK_SQL || ' LATEST_UPDATE_DATETIME = ''' || OUT_UPDATE_TIME || '''        ,'; --最新更新時間
 WK_SQL := WK_SQL || ' UPDATE_USER_ID = ''' || C_USER_ID || '''            ,'; --更新ユーザID
 WK_SQL := WK_SQL || ' UPDATE_PRG_ID = ''' || C_PROGRAM_ID || '''            ,'; --更新プログラムID
 WK_SQL := WK_SQL || ' UPDATE_DATETIME = SYSDATE                '; --更新日時
 WK_SQL := WK_SQL || ' WHERE              ';
 WK_SQL := WK_SQL || ' RTRIM(COMP_CD) = ''' || RTRIM(OUT_COMP_CD) || '''       ';
 WK_SQL := WK_SQL || ' AND RTRIM(SUPL_CD) = ''' || RTRIM(OUT_SUPL_CD) || '''       ';
 WK_SQL := WK_SQL || ' AND RTRIM(PAY_CONDITION_CODE) = ''' || RTRIM(OUT_PYMT_TERMS_CD) || ''' ';
 RETURN WK_SQL;
    END GET_UPD_PAY_CONDITIONS_CSV;

    -- *************************************************************************
    -- *** 機能名称:取引先・支払条件CSV作成済削除SQL文
    -- *** 戻り値:SQL文
    -- *** 機能説明:
    -- *************************************************************************
    FUNCTION GET_DEL_PAY_CONDITIONS_CSV RETURN VARCHAR2 IS
    BEGIN
 WK_SQL := ''; 
 WK_SQL := WK_SQL || ' DELETE FROM M_PAY_CONDITIONS_CSV          ';
 WK_SQL := WK_SQL || ' WHERE              ';
 WK_SQL := WK_SQL || ' RTRIM(COMP_CD) = ''' || RTRIM(V_PAY_CONDITIONS_CSV.COMP_CD) || '''        ';
 WK_SQL := WK_SQL || ' AND RTRIM(SUPL_CD) = ''' || RTRIM(V_PAY_CONDITIONS_CSV.SUPL_CD) || '''        ';
 WK_SQL := WK_SQL || ' AND RTRIM(PAY_CONDITION_CODE) = ''' || RTRIM(V_PAY_CONDITIONS_CSV.PAY_CONDITION_CODE) || ''' ';
 RETURN WK_SQL;
    END GET_DEL_PAY_CONDITIONS_CSV;

--******************************************************************************
--*** 機能名称:メイン
--*** 機能説明:
--******************************************************************************
    BEGIN

     RETURN_CD := 0;
     START_TIME := TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS');

     EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY UTL_CSV_DIR AS ''' || PPATH || '''';

     UTL_FILE.FGETATTR ('UTL_CSV_DIR', FILE1, FILE1_EXIST_FLG, FLENGTH, BSIZE);
     UTL_FILE.FGETATTR ('UTL_CSV_DIR', FILE2, FILE2_EXIST_FLG, FLENGTH, BSIZE);
     UTL_FILE.FGETATTR ('UTL_CSV_DIR', FILE3, FILE3_EXIST_FLG, FLENGTH, BSIZE);
    
     --ファイルが存在しないの場合
     IF FILE1_EXIST_FLG = TRUE OR FILE2_EXIST_FLG  = TRUE OR FILE3_EXIST_FLG = TRUE THEN
 RETURN_CD := 1;
 CD := 'E-AS92-001';
 MESSAGE := '指定したフォルダにすでにファイルが存在します。';
 END_TIME := TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS');
 RETURN;
     END IF;

     FCSVHANDLE := UTL_FILE.FOPEN('UTL_CSV_DIR', FILE1, 'w');
     FWINHANDLE := UTL_FILE.FOPEN('UTL_CSV_DIR', FILE2, 'w');
     FPAYHANDLE := UTL_FILE.FOPEN('UTL_CSV_DIR', FILE3, 'w');

     OPEN CUR_SEL_SUPL;
     LOOP
        FETCH CUR_SEL_SUPL INTO OUT_COMP_CD,OUT_SUPL_CD,OUT_PYMT_SUPL_CD,OUT_SUPL_NM,OUT_SUPL_SHORT_NM,OUT_SUPL_WINDOW_NM,OUT_SUPL_ZIP,OUT_SUPL_ADDRESS1,OUT_SUPL_PHONE,OUT_SUPL_FAX,OUT_UPDATE_TIME,OUT_PYMT_TERMS_CD;
        EXIT WHEN CUR_SEL_SUPL%NOTFOUND;

 OUT_SUPL_CD := SUBSTR(OUT_SUPL_CD,1,C_SUPL_CD_LEN);

 CSV_SUPL_NM := SUBSTR(OUT_SUPL_NM,1,C_CSV_NM_LEN/2);
 OUT_SUPL_NM := SUBSTR(OUT_SUPL_NM,1,C_NM_LEN/3);

 CSV_SUPL_SHORT_NM := SUBSTR(OUT_SUPL_SHORT_NM,1,C_CSV_SHORTNM_LEN/2);
 OUT_SUPL_SHORT_NM := SUBSTR(OUT_SUPL_SHORT_NM,1,C_SUPLSHORTNM_LEN/3);

 CSV_SUPL_WINDOW_NM := SUBSTR(OUT_SUPL_WINDOW_NM,1,C_CSV_NM_LEN/2);
 OUT_SUPL_WINDOW_NM := SUBSTR(OUT_SUPL_WINDOW_NM,1,C_NM_LEN/3);

 OUT_SUPL_ZIP := REPLACE(OUT_SUPL_ZIP,'''','''''');
 OUT_SUPL_ZIP := SUBSTR(OUT_SUPL_ZIP,1,C_SUPLZIP_LEN);

 CSV_SUPL_ADDRESS1 := SUBSTR(OUT_SUPL_ADDRESS1,1,C_CSV_NM_LEN/2);
 OUT_SUPL_ADDRESS1 := SUBSTR(OUT_SUPL_ADDRESS1,1,C_NM_LEN/3);

 V_ERR_TABLE := '(M_SUPL_CSV:';
 OPEN CUR_SEL_M_SUPL_CSV(OUT_SUPL_CD);
 FETCH CUR_SEL_M_SUPL_CSV INTO V_UPDATE_TIME;

 IF CUR_SEL_M_SUPL_CSV%NOTFOUND THEN
    STR := '"' || 'I' || '","' || RTRIM(OUT_SUPL_CD) || '","' || CSV_SUPL_NM || '","' || CSV_SUPL_SHORT_NM || '"';
    V_SUPL_CSV_NUM := V_SUPL_CSV_NUM + 1;
    V_ERR_KEY := RTRIM(INCOMP_CD) || '-' || RTRIM(OUT_SUPL_CD) || ')';
    UTL_FILE.PUT_LINE(FCSVHANDLE,convert(STR,'JA16SJIS'));
    EXECUTE IMMEDIATE GET_INS_SUPL_CSV;
 ELSE
    IF TO_CHAR(V_UPDATE_TIME,'YYYY/MM/DD') <> TO_CHAR(OUT_UPDATE_TIME,'YYYY/MM/DD') THEN
  STR := '"' || 'U' || '","' || RTRIM(OUT_SUPL_CD) || '","' || CSV_SUPL_NM || '","' || CSV_SUPL_SHORT_NM || '"';
     V_SUPL_CSV_NUM := V_SUPL_CSV_NUM + 1;
  V_ERR_KEY := RTRIM(INCOMP_CD) || '-' || RTRIM(OUT_SUPL_CD) || ')';
  UTL_FILE.PUT_LINE(FCSVHANDLE,convert(STR,'JA16SJIS'));
  EXECUTE IMMEDIATE GET_UPD_SUPL_CSV;
    END IF;
 END IF;

 CLOSE CUR_SEL_M_SUPL_CSV;

 V_ERR_TABLE := '(M_SUPL_WINDOW_CSV:';
 OPEN CUR_SEL_M_SUPL_WINDOW_CSV(OUT_SUPL_CD);
 FETCH CUR_SEL_M_SUPL_WINDOW_CSV INTO V_UPDATE_TIME;

 IF CUR_SEL_M_SUPL_WINDOW_CSV%NOTFOUND THEN
    STR := '"' || 'I' || '","' || RTRIM(OUT_SUPL_CD) || '","' || C_WINDOW_CD || '","' || ' ' || '","' || CSV_SUPL_WINDOW_NM || '","' || '3' || '","' || RTRIM(OUT_SUPL_ZIP) || '","' || CSV_SUPL_ADDRESS1 || '","","","' || RTRIM(OUT_SUPL_PHONE) || '","' || RTRIM(OUT_SUPL_FAX) || '"," ","1","0","1"';
    V_SUPL_WIN_NUM := V_SUPL_WIN_NUM + 1;
    V_ERR_KEY := RTRIM(INCOMP_CD) || '-' || RTRIM(OUT_SUPL_CD) || '-' || C_WINDOW_CD || ')';
    UTL_FILE.PUT_LINE(FWINHANDLE,convert(STR,'JA16SJIS'));
    EXECUTE IMMEDIATE GET_INS_SUPL_WINDOW_CSV;
 ELSE
    IF TO_CHAR(V_UPDATE_TIME,'YYYY/MM/DD') <> TO_CHAR(OUT_UPDATE_TIME,'YYYY/MM/DD') THEN
     STR := '"' || 'U' || '","' || RTRIM(OUT_SUPL_CD) || '","' || C_WINDOW_CD || '","' || ' ' || '","' || CSV_SUPL_WINDOW_NM || '","' || '3' || '","' || RTRIM(OUT_SUPL_ZIP) || '","' || CSV_SUPL_ADDRESS1 || '","","","' || RTRIM(OUT_SUPL_PHONE) || '","' || RTRIM(OUT_SUPL_FAX) || '"," ","1","0","1"';
  V_SUPL_WIN_NUM := V_SUPL_WIN_NUM + 1;
  V_ERR_KEY := RTRIM(INCOMP_CD) || '-' || RTRIM(OUT_SUPL_CD) || '-' || C_WINDOW_CD || ')';
  UTL_FILE.PUT_LINE(FWINHANDLE,convert(STR,'JA16SJIS'));
  EXECUTE IMMEDIATE GET_UPD_SUPL_WINDOW_CSV;
    END IF;
 END IF;

 CLOSE CUR_SEL_M_SUPL_WINDOW_CSV;

 V_ERR_TABLE := '(M_PAY_CONDITIONS_CSV:';
        OPEN CUR_SEL_M_PAY_CONDITIONS_CSV(OUT_SUPL_CD,OUT_PYMT_TERMS_CD);
 FETCH CUR_SEL_M_PAY_CONDITIONS_CSV INTO V_UPDATE_TIME;

 IF CUR_SEL_M_PAY_CONDITIONS_CSV%NOTFOUND THEN
    STR := '"' || 'I' || '","' || RTRIM(OUT_COMP_CD) || '","' || RTRIM(OUT_SUPL_CD) || '","' || RTRIM(OUT_PYMT_TERMS_CD) || '","' || C_SUB_CONTRACT_CLASS || '"';
    V_PAY_COND_NUM := V_PAY_COND_NUM + 1;
    V_ERR_KEY := RTRIM(INCOMP_CD) || '-' || RTRIM(OUT_SUPL_CD) || '-' || RTRIM(OUT_PYMT_TERMS_CD) || ')';
    UTL_FILE.PUT_LINE(FPAYHANDLE,convert(STR,'JA16SJIS'));
    EXECUTE IMMEDIATE GET_INS_PAY_CONDITIONS_CSV;
 ELSE
    IF TO_CHAR(V_UPDATE_TIME) <> TO_CHAR(OUT_UPDATE_TIME) THEN
     STR := '"' || 'U' || '","' || RTRIM(OUT_COMP_CD) || '","' || RTRIM(OUT_SUPL_CD) || '","' || RTRIM(OUT_PYMT_TERMS_CD) || '","' || C_SUB_CONTRACT_CLASS || '"';
     V_PAY_COND_NUM := V_PAY_COND_NUM + 1;
  V_ERR_KEY := RTRIM(INCOMP_CD) || '-' || RTRIM(OUT_SUPL_CD) || '-' || RTRIM(OUT_PYMT_TERMS_CD) || ')';
  UTL_FILE.PUT_LINE(FPAYHANDLE,convert(STR,'JA16SJIS'));
  EXECUTE IMMEDIATE GET_UPD_PAY_CONDITIONS_CSV;
    END IF;
 END IF;

 CLOSE CUR_SEL_M_PAY_CONDITIONS_CSV;

     END LOOP;
     CLOSE CUR_SEL_SUPL;

     V_ERR_TABLE := '(M_SUPL_CSV:';
     OPEN CUR_DEL_M_SUPL_CSV;
     LOOP
 FETCH CUR_DEL_M_SUPL_CSV INTO V_SUPL_CSV;
 EXIT WHEN CUR_DEL_M_SUPL_CSV%NOTFOUND;
 STR := '"' || 'D' || '","' || V_SUPL_CSV.SUPL_CD || '","' || V_SUPL_CSV.SUPL_NM || '","' || V_SUPL_CSV.SUPL_SHORT_NM || '"';
 V_SUPL_CSV_NUM := V_SUPL_CSV_NUM + 1;
 V_ERR_KEY := RTRIM(INCOMP_CD) || '-' || V_SUPL_CSV.SUPL_CD || ')';
 UTL_FILE.PUT_LINE(FCSVHANDLE,convert(STR,'JA16SJIS'));
 EXECUTE IMMEDIATE GET_DEL_SUPL_CSV;
     END LOOP;
     CLOSE CUR_DEL_M_SUPL_CSV;

     V_ERR_TABLE := '(M_SUPL_WINDOW_CSV:';
     OPEN CUR_DEL_M_SUPL_WINDOW_CSV;
     LOOP
 FETCH CUR_DEL_M_SUPL_WINDOW_CSV INTO V_SUPL_WINDOW_CSV;
 EXIT WHEN CUR_DEL_M_SUPL_WINDOW_CSV%NOTFOUND;
 STR := '"' || 'D' || '","' || V_SUPL_WINDOW_CSV.SUPL_CD || '","' || V_SUPL_WINDOW_CSV.SUPL_WINDOW_CD || '","' || V_SUPL_WINDOW_CSV.SUPL_DEPT_NM ||'","' || V_SUPL_WINDOW_CSV.SUPL_WINDOW_NM || '","' || V_SUPL_WINDOW_CSV.SUPL_TITLE_KBN || '","' || V_SUPL_WINDOW_CSV.SUPL_ZIP || '","' || V_SUPL_WINDOW_CSV.SUPL_ADD1 || '","' || V_SUPL_WINDOW_CSV.SUPL_ADD2 || '","' || V_SUPL_WINDOW_CSV.SUPL_ADD3 || '","' || V_SUPL_WINDOW_CSV.SUPL_TEL || '","' || V_SUPL_WINDOW_CSV.SUPL_FAX || '","' || V_SUPL_WINDOW_CSV.SUPL_MAIL || '","' || V_SUPL_WINDOW_CSV.SUPL_ALERT || '","' || V_SUPL_WINDOW_CSV.SUPL_MAIL_ALERT || '","' || V_SUPL_WINDOW_CSV.SUPL_INTERNET || '"';
 V_SUPL_WIN_NUM := V_SUPL_WIN_NUM + 1;
 V_ERR_KEY := RTRIM(INCOMP_CD) || '-' || V_SUPL_WINDOW_CSV.SUPL_CD || '-' || V_SUPL_WINDOW_CSV.SUPL_WINDOW_CD || ')';
 UTL_FILE.PUT_LINE(FWINHANDLE,convert(STR,'JA16SJIS'));
 EXECUTE IMMEDIATE GET_DEL_SUPL_WINDOW_CSV;
     END LOOP;
     CLOSE CUR_DEL_M_SUPL_WINDOW_CSV;

     V_ERR_TABLE := '(M_PAY_CONDITIONS_CSV:';
     OPEN CUR_DEL_M_PAY_CONDITIONS_CSV;
     LOOP
 FETCH CUR_DEL_M_PAY_CONDITIONS_CSV INTO V_PAY_CONDITIONS_CSV;
 EXIT WHEN CUR_DEL_M_PAY_CONDITIONS_CSV%NOTFOUND;
 STR := '"' || 'D' || '","' || RTRIM(V_PAY_CONDITIONS_CSV.COMP_CD) || '","' || V_PAY_CONDITIONS_CSV.SUPL_CD || '","' || V_PAY_CONDITIONS_CSV.PAY_CONDITION_CODE || '","' || V_PAY_CONDITIONS_CSV.SUB_CONTRACT_CLASS || '"';
 V_PAY_COND_NUM := V_PAY_COND_NUM + 1;
 V_ERR_KEY := RTRIM(INCOMP_CD) || '-' || V_PAY_CONDITIONS_CSV.SUPL_CD || '-' || V_PAY_CONDITIONS_CSV.PAY_CONDITION_CODE || ')';
 UTL_FILE.PUT_LINE(FPAYHANDLE,convert(STR,'JA16SJIS'));
 EXECUTE IMMEDIATE GET_DEL_PAY_CONDITIONS_CSV;
     END LOOP;
     CLOSE CUR_DEL_M_PAY_CONDITIONS_CSV;

     UTL_FILE.FCLOSE(FCSVHANDLE);
     UTL_FILE.FCLOSE(FWINHANDLE);
     UTL_FILE.FCLOSE(FPAYHANDLE);
     COMMIT;

     IF V_SUPL_CSV_NUM = 0 OR V_SUPL_WIN_NUM = 0 OR V_PAY_COND_NUM = 0 THEN
 UTL_FILE.FCLOSE(FCSVHANDLE);
      UTL_FILE.FCLOSE(FWINHANDLE);
      UTL_FILE.FCLOSE(FPAYHANDLE);
 UTL_FILE.FREMOVE('UTL_CSV_DIR', FILE1);
 UTL_FILE.FREMOVE('UTL_CSV_DIR', FILE2);
 UTL_FILE.FREMOVE('UTL_CSV_DIR', FILE3);
     END IF;

     MESSAGE := 'M_SUPL_CSV:' || V_SUPL_CSV_NUM || '件、' || 'M_SUPL_WINDOW_CSV:' || V_SUPL_WIN_NUM || '件、' || 'M_PAY_CONDITIONS_CSV:' || V_PAY_COND_NUM || '件';
     END_TIME := TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS');

     EXCEPTION
 WHEN OTHERS THEN
    UTL_FILE.FCLOSE(FCSVHANDLE);
         UTL_FILE.FCLOSE(FWINHANDLE);
         UTL_FILE.FCLOSE(FPAYHANDLE);
    UTL_FILE.FREMOVE('UTL_CSV_DIR', FILE1);
    UTL_FILE.FREMOVE('UTL_CSV_DIR', FILE2);
    UTL_FILE.FREMOVE('UTL_CSV_DIR', FILE3);
    RETURN_CD := 1;
    CD := SQLCODE;
    MESSAGE := SQLERRM;
    ERROR_DATA := V_ERR_TABLE || V_ERR_KEY;
    END_TIME := TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS');
    ROLLBACK;

    END;
/
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值