【Oracle:PL/SQL】 テキストファイルの書き込み

  UTL_FILE パッケージ



UTL_FILE パッケージ(パッケージ・プロシージャおよびタイプ・リファレンス )

Oracle Express Edition の場合、実行権限が与えられていないので、

sqlplus SYS/パスワード@localhost/XE AS SYSDBA

でログインして以下を実行します

grant execute on sys.utl_file to lightbox;

SYS のパスワードが解らず、SYSTEM にログインできる場合は、SQLPlus でログインして以下を実行します

ALTER USER SYS IDENTIFIED BY パスワード

変更したパスワードで SYS にログインします


実行できるオブジェクトの一覧は以下のようにして取得します

select * from ALL_TAB_PRIVS where PRIVILEGE = 'EXECUTE'



  テキストデータの書き込み



Oracle のキャラクタセットは、select * from V$NLS_PARAMETERS で確認できます。
データベースに格納されている日本語は、そのキャラクタセットで書き込まれるので注意して下さい。

以下のサンプルでは、UTF8 を SHIFT_JIS に変換していますが、変換しないと出力データに
余計な改行コードが出力されてしまいます



※ 10g Express では UTF8 です。

通常の 10g であれば、JA16SJIS なので、以下のいずれかが有効です
UTL_FILE.PUT_LINE( FILEHANDLE, PM_STRING );
UTL_FILE.PUTF( FILEHANDLE, '%s\n', PM_STRING );


  
FUNCTION MYLOG
(
	PM_FILE IN VARCHAR2
	,PM_STRING IN VARCHAR2
)
RETURN VARCHAR2	/* 戻り値の定義 */

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	FILEHANDLE	UTL_FILE.FILE_TYPE;

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('ファイル処理');
	FILEHANDLE := UTL_FILE.FOPEN( 'LOGDIR', PM_FILE, 'a' );
	UTL_FILE.PUT_LINE( FILEHANDLE, CONVERT( PM_STRING,'JA16SJIS','AL32UTF8') );
--	UTL_FILE.PUTF( FILEHANDLE, '%s\n', PM_STRING );
	UTL_FILE.FCLOSE( FILEHANDLE );
	RETURN PM_STRING;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
		RETURN PM_STRING;
END;
  


'LOGDIR' は、ディレクトリオブジェクトです。

↓を参照して下さい
http://winofsql.jp/VA003334/plsql080113005808.htm

Oracle 10g CONVER 関数










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ