1

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

我的代码:

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

我得到“ora-29280 无效的目录路径”

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

谢谢。

4

1 回答 1

4

不,你不能……文件说!

解决方法可能是对 /tmp 使用 ALL_DIRECTORIES,然后在 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
/

您可以编写一个函数来为请求的完整路径返回请求的数据库目录名称。并在不可用的情况下返回默认目录名称。

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

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

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

于 2014-09-17T21:11:40.753 回答