ORACLE pt.5 【PL/SQL のプロシージャ 備忘記録 - 外部ファイル操作】

プロシージャの書き方の備忘記録として
また、外部ファイルの扱い(UTL_FILE)についても
CREATE OR REPLACE PROCEDURE DBHOGEHOGE.PRC_PK ( --*********************************************** -- タイプ : プロシジャ --*********************************************** p_filename IN VARCHAR2 -- ファイル名 ) IS --定数 UserId CONSTANT VARCHAR2(40) := '9999'; -- 登録者ID ExtCSV CONSTANT CHAR(4) := '.csv'; -- CSVファイル拡張子 --変数 v_kytnid NUMBER; -- 拠点ID v_filename VARCHAR2(128); -- ファイル名 w_path_inp VARCHAR2(100); -- 取込フォルダ w_path_bak VARCHAR2(100); -- 退避フォルダ w_bk_filename VARCHAR2(100); -- 退避用ファイル名 w_found BOOLEAN; -- ファイル存在あり w_size NUMBER; w_block NUMBER; w_handle UTL_FILE.FILE_TYPE; -- ハンドル w_read VARCHAR2(512); -- 読み取りバッファ w_cnt NUMBER; -- 行番号 BEGIN --****************************************** -- 初期処理 --****************************************** -- 引数を変数へ格納 v_filename := p_filename; -- ファイル名 -- システム日付 w_sys_date := TO_NUMBER(TO_CHAR(SYSDATE,'yyyymmdd')); --****************************************** -- ファイルの存在確認 --****************************************** -- フォルダ情報を取得 SELECT DIR, BAK INTO w_path_inp, w_path_bak FROM M_FILES; -- CSVファイルのチェック UTL_FILE.FGETATTR(w_path_inp, v_filename || ExtCSV, w_found, w_size, w_block); -- 存在していない場合 IF w_found = FALSE THEN -- 処理終了 RETURN; END IF; -- 退避用ファイル名生成 w_bk_filename := v_filename || FileNameSep || v_kytnid || FileNameSep || v_targetday || FileNameSep || v_targetbin; --****************************************** -- 受信処理 --****************************************** w_handle := UTL_FILE.FOPEN(w_path_inp, v_filename || ExtCSV, 'r'); w_cnt := 0; LOOP BEGIN UTL_FILE.GET_LINE(w_handle, w_read); w_cnt := w_cnt + 1; -- 受信ファイル INSERT INTO T_JYUSIN ( FNAME, -- ファイル名 FGYONO, -- 行番号 FDATA, -- ファイルデータ INSDT, -- 登録日 ) VALUES ( v_filename, -- 引数.ファイル名 w_cnt, -- ファイルの行番号 w_read, -- 1行の生データ w_sys_date -- 登録日 ); EXCEPTION WHEN NO_DATA_FOUND THEN --ファイルの終端に来た場合は、ループ終了 EXIT; END; END LOOP; --****************************************** -- 退避フォルダファイルコピー --****************************************** -- CSVファイル UTL_FILE.FCOPY(w_path_inp, v_filename || ExtCSV, w_path_bak, w_bk_filename || ExtCSV); --****************************************** -- 受信ファイル削除 --****************************************** -- CSVファイル UTL_FILE.FREMOVE(w_path_inp, v_filename || ExtCSV); --****************************************** -- 正常終了 --******************************************/ EXCEPTION WHEN OTHERS THEN ROLLBACK; END PRC_PK /