2016-11-07 57 views
0

我想从oracle数据库中选择字节并将它们转换为图像文件。当我编写oracle过程时,它在UTL_FILE.fopen中停止并返回一个ORA-29280错误。 Oracle社区表示,这个错误是由于操作系统级用户可能没有权限写入文件夹而导致的,或者我们应该使用upper_cases。但对于建议1,我试图访问相同的文件夹使用.Net和图像文件已成功创建,建议2我尝试使用大写,但我仍然面临同样的错误。可能是什么问题呢?为什么我可以从.Net创建文件,但不能从oracle创建?下面是我的代码:无法从oracle打开文件

CREATE OR REPLACE PROCEDURE BLOB_UPDATE (file_name in varchar) IS 

    file_ref UTL_FILE.file_type; 
    raw_max_size constant number := 32767; 

begin 

    file_ref := UTL_FILE.fopen('C:\LOB', file_name, 'WB', raw_max_size); 
    -- Here it stops working ! -- 
    .... 
    utl_file.fclose(file_ref); 

END BLOB_UPDATE; 
+0

的Oracle安装在本地机器或你”重新使用远程数据库? – Kacper

+0

没有@Kacper,它没有安装在我的机器上 –

回答

0

请在您的数据库执行:

create or replace directory DIR as 'C:\LOB' 
grant read, write on directory DIR to your_user 

然后在你的程序中访问目录中:

file_ref := UTL_FILE.fopen('DIR', file_name, 'WB', raw_max_size); 
+0

对不起,但我不明白your_user是什么意思,我必须添加上面的代码,应该在创建oracle过程之前还是在里面?对不起,我的问题,但我仍然是一个初学者在Oracle –

+0

@ H.Al:从PL/SQL,你不能访问任何随机目录或文件。您只能访问您已声明的目录(“CREATE DIRECTORY XXX AS ...”),并在使用它们之前授予必要的权限。你必须用符号名称(在上面的例子中是'XXX')来引用它们。否则,你会得到ORA-29280错误。 – Codo

+0

@Kacper我现在发现了你的意思your_user和你的代码应该在我的程序开始后执行,但我不知道它为什么会返回一个PLS-00103错误,我错过了什么? –