SET FEEDBACK OFF
SET ECHO OFF
SET SERVEROUTPUT ON
SET TRIMSPOOL ON
SET LINESIZE 1024
SPOOL .\logfile.log
DECLARE
----------------------------------------
-- 変数定義
----------------------------------------
-- 定数その他宣言
DIR_PATH CONSTANT VARCHAR2(50) := 'C:\TEST';
FILE_PARA CONSTANT VARCHAR2(50) := 'file.txt';
-- File関連
P_RFILE UTL_FILE.FILE.TYPE; --ファイルポインタ読み込み用ポインタ
P_WFILE UTL_FILE.FILE.TYPE; --ファイルポインタ書き込み用ポインタ
sReadLine VARCHAR2(1024); -- 読み込みファイル格納用
-- 検出データ格納領域
wk_ITEM1 VARCHAR2(512);
wk_ITEM2 VARCHAR2(512);
wk_ITEM3 VARCHAR2(512);
wk_ITEM4 VARCHAR2(512);
wk_ITEM5 VARCHAR2(512);
-- 異常ログ用バッファ
ERR_MESSAGE VARCHAR2(100);
-- ユーザ定義例外
UDEF_PARA_ERROR EXCEPTION;
----------------------------------------
-- カーソル定義
----------------------------------------
CURSOR
XXX_CURSOR
(
CSR_COLUMN1 CHAR
CSR_COLUMN2 CHAR
)
IS
SELECT
FIELD1, --CHAR(10) NOT NULL --(P) 項目名
FIELD2,
FIELD3
FROM
TABLE NAME
WHERE
CSR_COLUMN1 = FIELD1
AND
CSR_COLUMN2 = FIELD2
;
-- カーソルから値を取得するバッファ
XXX_CURSOR_GETDATA XXX_CURSOR%ROWTYPE;
----------------------------------------
-- ロジック
----------------------------------------
BEGIN
--DBMS_OUTPUTパッケージのMAXサイズを設定
DBMS_OUTPUT.ENABLE(1000000);
--入力パラメータファイルのOPEN
ERR_MESSAGE := '';
ERR_MESSAGE := '入力パラメータファイルのOPEN';
P_RFILE := UTL_FILE.FOPEN(DIR_PATH, FILE_PARA, 'R');
-- ファイルよりパラメータ取得
LOOP
-- 一行読み込み
BEGIN
UTL_FILE.GET_LINE(P_RFILE, sReadLine);
EXCEPTION
WHEN NO_DATA_FOUND THEN
--処理を抜ける
EXIT;
END;
END LOOP;
-- 更新用情報ファイルを開く
P_WFILE := UTL_FILE.FOPEN(DIR_PATH, FILE_PARA, 'W');
----------------------------------------
-- データ取得
----------------------------------------
-- カーソルオープン
OPEN XXX_CURSOR
(
PARA_DATA1,
PARA_DATA2
);
-- ループ開始
LOOP
XXX_CURSOR_GETDATA.FIELD1 := NULL;
XXX_CURSOR_GETDATA.FIELD2 := NULL;
-- フェッチ開始
FETCH
XXX_CURSOR
INTO
XXX_CURSOR_GETDATA
;
-- NOTFOUNDが検出された時はループを抜ける
EXIT WHEN XXX_CURSOR%NOTFOUND;
wk_ITEM1 := RTRIM(XXX_CURSOR_GETDATA.FIELD1);
wk_ITEM2 := RTRIM(XXX_CURSOR_GETDATA.FIELD2);
-- 書き込みファイルオープン
IF UTL_FILE.IS_OPEN(P_WFILE) THEN
------------------------------------
-- 取得したデータをCSVファイルに出力
------------------------------------
UTL_FILE.PUT_LINE
(P_WFILE,
wk_ITEM1 ||','||
wk_ITEM2 ||','||
wk_ITEM3
);
END IF;
END LOOP;
-- カーソルをクローズ
IF XXX_CURSOR%ISOPEN THEN
CLOSE XXX_CURSOR;
END IF;
EXCEPTION
/* その他 */
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('#### 異常終了 ####');
DBMS_OUTPUT.PUT_LINE('CODE' || SQLCODE);
DBMS_OUTPUT.PUT_LINE('MSG' || SQLERRM);
-- カーソルをクローズ
IF XXX_CURSOR%ISOPEN THEN
CLOSE XXX_CURSOR;
END IF;
UTL_FILE.FCLOSE_ALL;
END;
/
SET TRIMSPOOL OFF
SET SERVEROUTPUT OFF
SPOOL OFF
EXIT;
最終更新:2008年11月16日 11:27