ORACLE PL/SQL UTL_FILEスクリプト

※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください

--前準備として①または②が必要
--①初期化パラメータでアクセス可能ディレクトリを設定(非推奨)
--utl_file_dir='*'

--ディレクトリオブジェクトを作成する(推奨)
--②CREATE DIRECTORY TMP_DIR AS '/home/ora112/tmp';
--  GRANT READ,write ON DIRECTORY TMP_DIR TO test;

ケース1(書き込み)
DECLARE
  W_HANDLE   UTL_FILE.FILE_TYPE;
  W_DIRNAME  VARCHAR2(250);
  W_FILENAME VARCHAR2(250);
  W_BUFFER   VARCHAR2(32767);
BEGIN
--W_DIRNAME := '/home/ora112/tmp'; -- ①のケース
  W_DIRNAME := 'TMP_DIR';          -- ②のケース(基本大文字で記述する)
  W_FILENAME := 'utl_file.log';

  --ファイルオープン 'a'は追加書き込み(append)モードでOPENすることを示す。'w'にした場合新規書き込みとなる
  W_HANDLE := UTL_FILE.FOPEN(LOCATION=>W_DIRNAME ,FILENAME=>W_FILENAME,OPEN_MODE=>'a',MAX_LINESIZE=>32767);
  W_BUFFER := 'created by';
  UTL_FILE.PUT_LINE(FILE=>W_HANDLE, BUFFER=>W_BUFFER);
  W_BUFFER := 'doppo1.net';
  UTL_FILE.PUT_LINE(FILE=>W_HANDLE, BUFFER=>W_BUFFER);
  UTL_FILE.FCLOSE(W_HANDLE);
END;
/

ケース2(読み込み)
set serveroutput on
DECLARE
  W_HANDLE   UTL_FILE.FILE_TYPE;
  W_DIRNAME  VARCHAR2(250);
  W_FILENAME VARCHAR2(250);
  W_BUFFER   VARCHAR2(32767);
BEGIN
  W_DIRNAME := 'TMP_DIR';
  W_FILENAME := 'utl_file.log';

  --ファイルオープン 'r'は読み込み(read)モードでOPENすることを示す。
  W_HANDLE := UTL_FILE.FOPEN(LOCATION=>W_DIRNAME ,FILENAME=>W_FILENAME,OPEN_MODE=>'r',MAX_LINESIZE=>32767);

  LOOP
    BEGIN
      UTL_FILE.GET_LINE(FILE=>W_HANDLE, BUFFER=>W_BUFFER);
      DBMS_OUTPUT.PUT_LINE(W_BUFFER);
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        EXIT;
      END;
  END LOOP;
  UTL_FILE.FCLOSE(W_HANDLE);
END;
/

--実行結果:
created by
doppo1.net


マニュアル

Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス(10.2)
PL/SQL ユーザーズ・ガイドおよびリファレンス(10.2)
★ORACLE案件承ります