使用 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
是否有execute
SYS.UTL_FILE
的权限。
你可以找到更多关于SYS.UTL_FILE
here的信息。
还有一个类似的问题here。
【讨论】:
以上是关于使用 dbms_xslprocessor.clob2file 将 XML 写入文件时出现 Oracle 错误的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)