最近,我将DB的版本更新为Oracle 11G。从那一刻起,写入文件失败。
我的代码:
UTL_FILE.FOPEN('/tmp', 'file.txt', 'w');
我收到了“ora-29280无效目录路径”
我知道我应该使用Oracle DIRECTORY(“创建目录...”),但是在Oracle 10G中,它使用了显式路径,并且我不想更改我的代码。
感谢。
答案 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/