首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DBMS_XSLPROCESSOR.CLOB2FILE -错误无效目录路径

问DBMS_XSLPROCESSOR.CLOB2FILE -错误无效目录路径
EN

Stack Overflow用户
提问于 2015-12-17 08:50:52
回答 1查看 4.7K关注 0票数 1

这是我正在尝试运行的PL/SQL过程。我面临的问题是一个无效的目录路径。我正在windows服务器上运行Oracle 11g。我在另一台机器上配置了一个客户机,这是一台linux机器,我尝试在init.ora文件中签入以设置目录路径,但是在11g Windows版本中似乎不支持futil包。

如何从表中导入单个列,其中XML_clob(XML存储在一堆中),列类型在本例中是CLOB,然后转储到文件中。了解是否有更好的PL/SQL过程可用于将整个列转换为单个文件并通过客户端计算机存储在目录中

感谢你对我的问题的指导

更新

代码语言:javascript
复制
CREATE or REPLACE PROCEDURE 
process_all_rows
IS
   TYPE clob_aat 
   IS TABLE OF minf100k300wclob%xml_clob 
      INDEX BY PLS_INTEGER;  
   l_XML clob_aat;


BEGIN
  select XMLElement(xml_clob).getClobVal()
   BULK COLLECT INTO l_XML
      FROM minf100k300wclob;


FOR indx IN 1 .. L_XML.COUNT  
   LOOP
      dbms_lob.append(L_XML, 'XML_EDI_FILES_1', 'file1.xml', nls_charset_id('AL32UTF8')); 
   END LOOP;
END process_all_rows;

我无法使它工作,因为我得到了如下所示的错误

过程PROCESS_ALL_ROWS的错误:

代码语言:javascript
复制
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/4  PL/SQL: Item ignored
5/33     PLS-00208: identifier 'XML_CLOB' is not a legal cursor attribute
12/22    PLS-00382: expression is of wrong type
18/7     PL/SQL: Statement ignored
18/7     PLS-00306: wrong number or types of arguments in call to 'APPEND'
SQL> 
enter code here
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-17 13:55:45

1)要使用clob2file或大多数依赖于UTL_FILE的函数,您必须首先在oracle数据库中创建一个directory object。语法是:

代码语言:javascript
复制
CREATE DIRECTORY XML_EDI_FILES AS 'C:\path\on\your\server\';

这会将服务器上指定的目录添加到具有指定名称的特殊oracle表中,在这种情况下是XML_EDI_FILES。稍后调用与文件相关的过程时,将该名称作为参数传递。有关更多信息,请参见文档。当然,服务器上的oracle进程必须具有对该dir的写权限。

2)等一下,通过客户端机?例如,使用sqlplus假脱机。粗语法是

代码语言:javascript
复制
set long 4000;
spool output_file.txt
select xml_clob from minf100k300wc

虽然我几乎可以保证这在一开始不会像预期的那样工作,因为sql-plus也倾向于输出列名、插入换行等。您必须查找sqlplus格式选项。我可能会使用一些Java代码来代替,Clobs很好地映射到字符串IIRC。

3)不清楚你在问什么。

对最新问题的答复:

...but,我甚至在我的评论中描述了你必须做的事情。给你:

代码语言:javascript
复制
CREATE or REPLACE PROCEDURE process_all_rows IS
  tmp_clob clob;
  cursor cur_clob is
    select XMLElement(xml_clob).getClobVal() val FROM minf100k300wclob;
begin
  dbms_lob.createtemporary(tmp_clob,true);
  for c in cur_clob loop
    dbms_lob.append(tmp_clob, c.val);
  end loop;
  dbms_xslprocessor.clob2file(tmp_clob, 'XML_EDI_FILES_1', 'file1.xml', nls_charset_id('AL32UTF8'));
  dbms_lob.freetemporary(tmp_clob);
end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34330234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档