首页 > 解决方案 > 包含 XML 的拆分 Clob

问题描述

我有一个表,在 clob 列中包含如下值:<root><node><a>text1a</a><b>text1b</b></node><node><a>text2a</a><b>text2b</b></node></root>

使用 PL/SQL 我需要查询它并在两行中​​获取此输出:

<node><a>text1a</a><b>text1b</b></node>
<node><a>text2a</a><b>text2b</b></node>

每个字符可能超过 4000 个字符。标签必须包含在输出中。

标签: sqlregexxmloracleplsql

解决方案


将 clob 转换为 xmltype 并使用 xmltable 对其进行解析:

with s as (select '<root><node><a>text1a</a><b>text1b</b></node><node><a>text2a</a><b>text2b</b></node></root>' c from dual)
select x.node node_xml, x.node.getclobval() node_clob
from s,
xmltable(
'/root/node'
passing xmltype(s.c)
columns
node xmltype path '.'
) x;

NODE_XML                                   NODE_CLOB                                 
------------------------------------------ ------------------------------------------
<node><a>text1a</a><b>text1b</b></node>    <node><a>text1a</a><b>text1b</b></node>   
<node><a>text2a</a><b>text2b</b></node>    <node><a>text2a</a><b>text2b</b></node>

推荐阅读