DBMS_XSLPROCESSOR.CLOB2FILE到子目录

时间:2014-09-15 12:40:24

标签: linux oracle

我有一段非常简单的代码,它只是将对象源写入服务器。

DECLARE
    data CLOB;
    objType varchar2(30) := 'PACKAGE_SPEC';
    objSchema varchar2(30) := 'TEST';
    objName varchar2(30) := 'TEST';
    fname varchar2(256) := objName || '.sql';
BEGIN
    SELECT dbms_metadata.get_ddl(objType,objName,objSchema) into data from dual;
    dbms_output.put_line(fname);
    DBMS_XSLPROCESSOR.CLOB2FILE(data,'SVN',fname);
END;
/

SVN是一个目录

create or replace directory svn as '/tmp/svn'

我想知道我是否可以写入svn的子目录,但这似乎不起作用 e.g。

DECLARE
    data CLOB;
    objType varchar2(30) := 'PACKAGE_SPEC';
    objSchema varchar2(30) := 'TEST';
    objName varchar2(30) := 'TEST';
    fname varchar2(256) := objType || '/'|| objName || '.sql';
BEGIN
    SELECT dbms_metadata.get_ddl(objType,objName,objSchema) into data from dual;
    dbms_output.put_line(fname);
    DBMS_XSLPROCESSOR.CLOB2FILE(data,'SVN',fname);
END;
/

忽略“/”之前的部分。 有没有办法写入子目录或者我是否必须为每个路径创建一个(oracle)目录?

1 个答案:

答案 0 :(得分:1)

代替任何确定的信息,dbms_xlsprocessor使用utl_file或相同的基础机制似乎是合理的。 documentation for utl_file有一个示例说明"子目录不可访问",但更有用fopen()个州:

  

如果目录路径作为文件名的一部分给出,FOPEN会忽略它。

哪个符合您所看到的行为;如果您没有收到错误,则只会在directory对象指向的目录中创建该文件,并且忽略您提供的子目录部分。

所以,是的,您需要为要写入的每个路径创建一个Oracle directory对象,并将该目录对象的名称提供给clob2file