DBMS_OUTPUT.PUT_LINE の結果は、それに対応した実行環境でないと 表示されませんが、SQL と同じように文字列として実行できます。 扱いは、UPDATE や INSERT のような結果の行を返さない実行です。 サーバーへ登録する時の記述の AS 以降を使い、AS を DECLARE に 変える事によって実行可能です。 定型的な処理は、引数を使って呼び出せるようにサーバーに登録しますが、 その時だけの運用的な処理では、このように実行するほうが現実的です。 また、サーバーで登録できない場合は、レスポンスに問題は出ますが、 文字列としてコードを実行毎に作成するというアプリケーションも 実際問題として良く使われているはずです。
DECLARE
WK_CNT NUMBER := 0;
CURSOR cur_main IS
SELECT * FROM 社員マスタ where 社員コード >= '0021';
社員_REC cur_main%ROWTYPE;
/* ファイルを扱う為の変数 */
FILEHANDLE UTL_FILE.FILE_TYPE;
/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
OPEN cur_main;
/* ファイルを開く */
FILEHANDLE := UTL_FILE.FOPEN( 'MYDIR', 'syain.csv', 'w' );
LOOP
FETCH cur_main INTO 社員_REC;
EXIT when cur_main%NOTFOUND;
WK_CNT := WK_CNT + 1;
/* ファイルへ書き込む */
UTL_FILE.PUT_LINE( FILEHANDLE,
社員_REC.社員コード
||','||社員_REC.氏名
||','||社員_REC.フリガナ
||','||社員_REC.所属
||','||社員_REC.性別
||','||社員_REC.作成日
||','||社員_REC.更新日
||','||社員_REC.給与
||','||社員_REC.手当
||','||社員_REC.管理者
||','||社員_REC.生年月日
);
END LOOP;
CLOSE cur_main;
/* ファイルを閉じる */
UTL_FILE.FCLOSE( FILEHANDLE );
DBMS_OUTPUT.PUT_LINE('更新件数:' || WK_CNT );
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
$if 1=1 $then
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
$end
END;
■ 関連する記事 Oracle : ディレクトリオブジェクト ■ 関連する Oracle ドキュメント FOPENファンクション
タグ:Oracle


