utl_file fopen - 我无法将文本写入文件

时间:2014-09-17 21:03:45

标签: oracle oracle11g utl-file

最近,我将DB的版本更新为Oracle 11G。从那一刻起,写入文件失败。

我的代码:

UTL_FILE.FOPEN('/tmp', 'file.txt', 'w');

我收到了“ora-29280无效目录路径”

我知道我应该使用Oracle DIRECTORY(“创建目录...”),但是在Oracle 10G中,它使用了显式路径,并且我不想更改我的代码。

感谢。

1 个答案:

答案 0 :(得分:4)

不,你不能...... Document说出来了!

解决方法可能是使用ALL_DIRECTORIES作为/ tmp,然后在FOPEN中使用它

SELECT DIRECTORY_NAME INTO MY_DIR FROM ALL_DIRECTORIES WHERE DIRECTORY_PATH='/tmp';

UTL_FILE.FOPEN(MY_DIR, 'file.txt', 'w');

出于安全考虑,似乎Oracle不再直接支持文件路径。

必须事先正确创建目录。

CREATE OR REPLACE DIRECTORY TEMP AS '/tmp'
/

GRANT READ, WRITE ON DIRECTORY TEMP TO MYUSER
/

您可以编写一个函数来返回所请求的完整路径的请求的DB目录名称。如果不可用,则返回默认目录名。

编辑: UTL_FILE_DIR可用于硬编码目录路径。如果INIT.ORA参数具有那些目录路径。否则,必须添加它,并且数据库必须被退回。

下面的链接提供了一些有关如何使用它的有用信息,以及使用Directory对象而不是硬编码路径的优点!

http://www.otnblogs.com/using-oracle-directories-instead-utl_file_dir/