为在Oracle中没有根元素的clob创建xml根元素

时间:2013-11-04 07:18:42

标签: database oracle plsql

通过迭代游标,我创建了一个低于xml格式的CLOB。假设l_tot_clob clob包含以下内容:

<a row="1">
 <b>test</b>
<a>
<a row="2">
 <b>test</b>
</a>

然后我尝试将上面放在另一个名为Record的元素根目录中,并将结果分配给另一个名为l_return_clob的clob。代码如下:

SELECT xmlelement("Record" , xmlconcat(xmltype(l_tot_clob))).getclobval() 
INTO l_return_clob
FROM dual;

我对retrun l_return_clob的期望是这样的:

<Record>
<a row="1">
 <b>test</b>
<a>
<a row="2">
 <b>test</b>
</a>
</Record>

但是我假设因为l_tot_clob没有父元素,所以在尝试创建根元素为Record时,它会给出以下错误:

  

fdm_ttwof_pkg.main_prc - 例外-ORA-31011:XML解析失败   ORA-19202:XML处理LPX-00245发生错误:额外数据   文件结束后

在这种情况下,如何将Record元素添加为根元素。

1 个答案:

答案 0 :(得分:3)

如果您只需要将您的xml包含在<Record>..</Record>中,并且您的XML位于CLOB中,那么为什么不只是简单地连接'<Record>''</Record>'字符串?

DECLARE
  v_clob CLOB;
  v_clob_with_root CLOB;
  v_xml xmltype;
BEGIN
  v_clob := '
    <a row="1">
     <b>test</b>
    <a>
    <a row="2">
     <b>test</b>
    </a>';

  v_clob_with_root := '<Record>' || v_clob_with_root || '</Record>';

  v_xml := xmltype(v_clob_with_root); -- no errors, XML is correct
END;