CSV イメージを最初から SQL で作成しておいて、取りだすデータが 1つの列にしておく事で高速な処理が可能になります
CREATE OR REPLACE PROCEDURE LIST_MEMBER ( /* カーソルの範囲指定用 */ PM_STRING IN VARCHAR2 ) /**********************************************************/ /* 変数の定義 */ /**********************************************************/ AS WK_VALUE VARCHAR2(2000); /* カーソルの定義(主に複数読み込み用) */ CURSOR cur_main IS SELECT 社員コード||','|| 氏名||','|| フリガナ||','|| 所属||','|| 性別||','|| 作成日||','|| 更新日||','|| 給与||','|| 手当||','|| 管理者||','|| 生年月日 from "社員マスタ" where 社員コード <= PM_STRING; -- ディスクへ書き込むファイル名 WK_FILENAME VARCHAR2(100) := 'syain.csv'; -- ファイルにアクセスする為のハンドルの定義 FILEHANDLE UTL_FILE.FILE_TYPE; /**********************************************************/ /* 処理開始 */ /**********************************************************/ BEGIN DBMS_OUTPUT.PUT_LINE('デバッグ:開始'); DBMS_OUTPUT.PUT_LINE('デバッグ:引数:'||PM_STRING); /* カーソルを開く */ OPEN cur_main; -- 第一引数は、ディレクトリオブジェクトの名称( 但し文字列 ) FILEHANDLE := UTL_FILE.FOPEN( 'MYDIR', WK_FILENAME, 'w' ); /* ループ処理(ブロック) */ LOOP /* 定義したレコード変数に読み込み */ FETCH cur_main INTO WK_VALUE; /* カーソルに対するシステム変数でデータ終わりを判断 */ if cur_main%NOTFOUND then /* ループ処理を脱出 */ EXIT; end if; -- 書き込み UTL_FILE.PUT_LINE(FILEHANDLE,WK_VALUE); END LOOP; -- ファイルを閉じる UTL_FILE.FCLOSE( FILEHANDLE ); /* カーソルを閉じる */ CLOSE cur_main; /**********************************************************/ /* 一番外側のブロックの例外処理 */ /**********************************************************/ $if 1=1 $then EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM); $end END;
|
【Oracle : PL/SQLの最新記事】
- PL/SQL : Function と Procedure の簡単なサンプル
- Oracle : PL/SQL Function の使用方法
- Oracle : PL/SQL : 暗黙のカーソルとループブロックを使用した自動行挿入
- Oracle : PL/SQL : SELECT 〜 INTO 構文の一般的な使用方法
- Oracle : PL/SQL : カーソルを使った一般的なループ処理を行うプロシージャ
- Oracle : PL/SQL : Function のサンプルと使い方
- PL/SQL : OUT タイプのパラメータを持つストアードプロシージャの処理
- PL/SQL : プロシージャの呼び出し
- PL/SQL : Function 雛形