2012-03-31 18:17:47 (Sat);
UTL_FILE パッケージ、CREATE DIRECTORY編 oracle 9i 以降
ディレクトリオブジェクトを作成し、権限を付与(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