【问题标题】:Cannot open file from oracleoracle无法打开文件
【发布时间】:2016-11-07 09:41:40
【问题描述】:

我正在尝试从 oracle 数据库中选择字节并将它们转换为图像文件。当我编写 oracle 程序时,它在 UTL_FILE.fopen 中停止并返回 ORA-29280 错误。 Oracle 社区说这个错误是因为操作系统级别的用户可能没有写入文件夹的权限,或者我们应该使用大写字母。但是对于建议 1,我尝试使用 .Net 访问同一个文件夹并成功创建了图像文件,对于建议 2,我尝试使用大写字母,但我仍然面临同样的错误。可能是什么问题呢?为什么我可以从 .Net 创建文件,但不能从 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;

【问题讨论】:

  • Oracle 是本地安装在您的机器上,还是您正在使用远程数据库?
  • 没有@Kacper,它没有安装在我的机器上

标签: .net oracle file-access lob utl-file


【解决方案1】:

请在您的数据库上执行:

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); 

【讨论】:

  • 对不起,我不明白 your_user 是什么意思,我必须在哪里添加上面的代码,应该在创建 oracle 程序之前还是在里面?抱歉我的问题,但我仍然是 Oracle 的初学者
  • @H.Al:从 PL/SQL 中,您无法访问任何随机目录或文件。您只能访问已声明 (CREATE DIRECTORY XXX AS ...) 并在使用它们之前授予必要权限的目录。您必须通过符号名称(在上述情况下为XXX)来引用它们。否则,您会收到 ORA-29280 错误。
  • @Kacper 我现在发现了 your_user 的意思,并且您的代码应该在开始后在我的过程中实现,但我不知道为什么它返回 PLS-00103 or 错误,我错过了吗什么?
  • 好的@Codo 谢谢你的声明它澄清了很多事情
  • @H.Al 创建并授予您执行一次。然后在程序中使用我帖子中的最后一行。
猜你喜欢
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 2018-11-30
  • 2015-10-16
相关资源
最近更新 更多