UTL_FILE.FOPEN()过程不接受oracle 12c数据库中的目录路径?

时间:2017-01-17 13:25:01

标签: oracle unix plsql

下面的代码在oracle 10g数据库中完美运行

 DECLARE
 g_file_handle     UTL_FILE.FILE_TYPE;
 g_dir     varchar2(100);
 BEGIN    
 g_dir :=     Scamp_Utils.getutlfiledir;
 DBMS_OUTPUT.PUT_LINE (g_dir);
 g_file_handle := UTL_FILE.FOPEN (g_dir, 'qwe.txt', 'W', 32767);
 UTL_FILE.PUT_LINE (g_file_handle, 'BEGINDATA');
 UTL_FILE.FCLOSE (g_file_handle);
 COMMIT;
 END;
 /

此处Scamp_Utils.getutlfiledir是一个返回utl_file_dir中定义的路径的函数。 但是同样的代码在oracle 12c database中不起作用。我收到了错误:

  

ORA-29280:目录路径无效   ORA-06512:在" SYS.UTL_FILE",第41行   ORA-06512:at" SYS.UTL_FILE",第478行   ORA-06512:第7行

我已经向操作系统级别的所有人提供了rwx权限。我还是得到了这个错误。我可以使用oracle逻辑目录,但我不想更改代码。我该怎么办?

1 个答案:

答案 0 :(得分:0)

Oracle有两个选项可以为utl_file声明一个目录。

 1. Change `utl_file_dir='/appl/flstadm/utl_files/wlsbb01'` in INIT.ORA  file and restart DB. This solution is not recommended and deprecated. 

 2. Create directory object in DB.
CREATE OR REPLACE DIRECTORY my_dir AS '/appl/flstadm/utl_files/wlsbb01';
GRANT read, write ON DIRECTORY my_dir TO your_user;

g_file_handle := UTL_FILE.FOPEN ('my_dir', 'qwe.txt', 'W', 32767);

您是否已将路径添加到init.ora?