使用 dbms_xslprocessor.clob2file 将 XML 写入文件时出现 Oracle 错误

Posted

技术标签:

【中文标题】使用 dbms_xslprocessor.clob2file 将 XML 写入文件时出现 Oracle 错误【英文标题】:Oracle error when writing XML to a file using dbms_xslprocessor.clob2file 【发布时间】:2014-05-29 05:24:42 【问题描述】:

我遇到了这样的场景,比如当我使用 PL/SQL 将 XML 文件写入文件夹时它可以工作,而当使用存储过程写入时它会失败并抛出如下错误

ORA-29289: directory access denied
ORA-06512: at "SYS.UTL_FILE", line 41
ORA-06512: at "SYS.UTL_FILE", line 478
ORA-06512: at "XDB.DBMS_XSLPROCESSOR", line 317
ORA-06512: at "TESTPROC", line 5
ORA-06512: at line 1

PL/SQL

declare
l_xmldoc clob;
begin
select XMLElement("dateval", sysdate).getClobVal() into l_xmldoc from dual;
dbms_xslprocessor.clob2file(l_xmldoc, 'XML_EDI_FILES', 'file1.xml', nls_charset_id('UTF8'));
end;

SP

create or replace procedure testproc is
l_xmldoc clob;
begin
select XMLElement("dateval", sysdate).getClobVal() into l_xmldoc from dual;
dbms_xslprocessor.clob2file(l_xmldoc, 'XML_EDI_FILES', 'file1.xml', nls_charset_id('UTF8'));
end;

我确信所有权限都授予了我正在写入的目录,这就是我相信在使用 PL/SQL 时它可以工作的原因。

非常感谢您对此的任何帮助。

提前致谢

【问题讨论】:

【参考方案1】:

从“sys”用户向“user1”授予读写权限后错误消失

但是,我的问题是该目录是从用户“user1”创建的,所以我假设默认情况下所有权限都授予该目录。那么为什么在执行过程时要抛出异常呢?当它与 PL/SQL 一起工作时

【讨论】:

【参考方案2】:

我知道这个问题是不久前提出的,但是,我想我可以提供一点帮助。

正如@jose 在他的回答中提到的那样,他使用 user1 在 Oracle 上创建了目录,但是,当您调用 dbms_xslprocessor.clob2file 时,它在内部使用 SYS.UTL_FILE PL/SQL 包将文件保存在磁盘上.

看看user1是否有executeSYS.UTL_FILE的权限。

你可以找到更多关于SYS.UTL_FILEhere的信息。

还有一个类似的问题here。

【讨论】:

以上是关于使用 dbms_xslprocessor.clob2file 将 XML 写入文件时出现 Oracle 错误的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份