我有一段非常简单的代码,它只是将对象源写入服务器。
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)目录?
答案 0 :(得分:1)
代替任何确定的信息,dbms_xlsprocessor
使用utl_file
或相同的基础机制似乎是合理的。 documentation for utl_file
有一个示例说明"子目录不可访问",但更有用fopen()
个州:
如果目录路径作为文件名的一部分给出,
FOPEN
会忽略它。
哪个符合您所看到的行为;如果您没有收到错误,则只会在directory
对象指向的目录中创建该文件,并且忽略您提供的子目录部分。
所以,是的,您需要为要写入的每个路径创建一个Oracle directory
对象,并将该目录对象的名称提供给clob2file
。