【问题标题】:Convert xml to clob by maintaining formatting Oracle11g通过维护格式化 Oracle11g 将 xml 转换为 clob
【发布时间】:2014-12-01 12:00:38
【问题描述】:

我必须将 xmltype 的变量存储到一个 clob 中。我正在使用 getclobval() 函数将 xml 转换为 clob。 但是,数据作为字符串存储在 clob 中,并且格式会丢失。 有什么方法可以在将 xmltype 转换为 clob 时保留 xml 格式?

select xmlelement(info,xmlelement(name,'Sankalp'),xmlelement(surname,'Patil')) into xml1 from dual; 
dbms_output.put_line(xml1.getClobval);

输出:

<INFO><NAME>Sankalp</NAME><SURNAME>Patil</SURNAME></INFO>

我期望输出为:

<INFO>
  <NAME>Sankalp</NAME>
  <SURNAME>Patil</SURNAME>
</INFO>

感谢期待

【问题讨论】:

  • 我们在谈论什么“格式化”?我假设文档中的原始空格?根据您的描述,听起来您是说当您将数据存储在 CLOB 列中时格式丢失,这意味着 getClobVal() 函数正在返回一个包含您想要的格式的 CLOB。那准确吗?如果这就是你所说的,我会感到惊讶。 XMLType 变量是否来自表?如果是这样,该表如何存储 XML 数据(CLOB、二进制 XML、对象关系?)
  • 您需要编辑您的问题(并可能正确格式化编辑)。我看不出预期输出和实际输出之间有任何区别。您真的是从查询中构造 XMLType 吗?还是您将 XML 文件中的数据加载到 XMLType 中?
  • 为什么你希望输出有额外的空格?您编写的查询似乎没有做任何事情来注入额外的空白,因此看起来没有任何空白需要维护。如果您在 SQL*Plus 会话中运行 SELECT 语句(当然没有 into xml1),您将获得一个没有多余空格的 XML 文档。
  • xmldata 由 xmlelement 函数动态生成,如我在示例代码中所示。
  • 如果使用 xmltype 数据类型创建列,则输出将以正确的 xml 格式存储。再次总结一下,我想使用 xmltype 函数生成 xml,将其存储为 clob,当下游应用程序读取此 clob 时,它应该具有 xml 格式。

标签: xml clob oracle11gr2 xmltype


【解决方案1】:

这终于完成了工作:

select xmlserialize(content v_xmltype as clob indent size = 2 ) 
 into v_clob_data from dual;

仅供参考,Oracle 建议使用 xmlserialize 而不是 getclobval。

【讨论】:

  • 也可以通过这种方式完成:SELECT xmltype.EXTRACT (var1_xmltype, '/*') INTO var2_xmltype FROM DUAL; var3_clob := var2.getclobval;
猜你喜欢
  • 1970-01-01
  • 2011-06-14
  • 2012-04-26
  • 2018-06-15
  • 2014-09-03
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多