OracleのPROCEDUREでファイルにログを出力する

参照:http://www.shift-the-oracle.com/plsql/utl_file/create-directory.html

1.ディレクトリの用意

osのDBAユーザでログファイル出力先のディレクトリを用意する。

# mkdir /var/log/oracle

2.UTL_FILEの設定

CREATE DIRECTORY HOGE_LOG_DIR AS '/var/log/oracle';
GRANT READ ON DIRECTORY HOGE_LOG_DIR TO user_name ;
GRANT WRITE ON DIRECTORY HOGE_LOG_DIR TO user_name ;
-- 確認
SELECT * FROM ALL_DIRECTORIES ;

3.PROCEDURE本体

はこんな感じ

---------------------
-- ファイルに出力
---------------------
PROCEDURE INFO (MSG VARCHAR2) IS
	FILE_HANDLE  UTL_FILE.FILE_TYPE;  /* FILEハンドラ */
BEGIN
       /* 出力先のファイルを追加書込みモードでOPEN */
       	FILE_HANDLE := UTL_FILE.FOPEN(
               	                  'HOGE_LOG_DIR'
                       	        , 'hoge.log'
                               	, 'A'  /* "R"…Input、"W"…Output、"A"…Append */
                                , 32767  /* レコードバイト長:1 〜 32767 */
                        );

        /* 出力先のファイルへ書込み処理を行う。*/
        UTL_FILE.PUT_LINE(
                  FILE_HANDLE
                , to_char(SYSDATE, 'YYYY/MM/DD HH24:MI:SS')
                || '	' || 'INFO'
                || '	' || MSG
            );

        /* 出力先のファイルをCLOSE */
	UTL_FILE.FCLOSE(FILE_HANDLE);
	
/* エラーは全て無視 */
EXCEPTION
	WHEN OTHERS THEN
		UTL_FILE.FCLOSE_ALL;
		RAISE;
END INFO_FILE;