Oracle > ストアドからファイル出力する

2012-03-31 18:17:47 (Sat);

UTL_FILE パッケージ、CREATE DIRECTORY編  oracle 9i 以降


Oracleからファイルを出力する方法です。



ディレクトリオブジェクトを作成し、権限を付与(public)

まずディレクトリオブジェクトを作成します。
sqlplus system/manager@db
CREATE DIRECTORY MYDIR AS 'c:\output_dir';
GRANT READ,WRITE ON DIRECTORY MYDIR TO PUBLIC;

--確認
SELECT * FROM ALL_DIRECTORIES;


該当ディレクトリにファイル出力権限(OSレベル)を付与します。

上記例で言えば
Oracleインストールユーザに「c:\output_dir」へのファイル書き込み権限を与えます。
everyone に与えてしまっても良いです。(セキュリティ的に問題なければ)



試験用ストアドを作成し、動作確認してみます。

sqlplus scott/tiger@db
CREATE OR REPLACE PROCEDURE WK_CREATE_DIR_WRITE_SAMPLE
AS
	vHandle		UTL_FILE.FILE_TYPE;
	vDirname	VARCHAR2(250);
	vFilename	VARCHAR2(250);
	vOutput		VARCHAR2(32767);
BEGIN
	vDirname := 'MYDIR';   -- (注) ディレクトリオブジェクト名を大文字で指定する
	vFilename := 'test.txt';
	vHandle := UTL_FILE.FOPEN(vDirname ,vFilename,'w', 32767);
 
	vOutput := 'CREATE DIRECTORY 経由でのファイル出力です';
	UTL_FILE.PUT_LINE(vHandle, vOutput);
	UTL_FILE.FCLOSE(vHandle);
EXCEPTION WHEN OTHERS THEN
	UTL_FILE.FCLOSE_ALL;
	RAISE;
END;

書くまでもないかもしれないけど、実行方法
sqlplus scott/tiger@db
begin
  WK_CREATE_DIR_WRITE_SAMPLE;
end;
/





作成しなおす場合は一度消す

sqlplus system/manager@db
REVOKE READ,WRITE ON DIRECTORY MYDIR FROM PUBLIC;
DROP DIRECTORY MYDIR;

※revokeはなくてもいいかも。















最終更新:2012年03月31日 18:17