0

我在 CLOB 类型的 Oracle 数据库中有字段。我需要将此文件的多行合并为一行。以下是内容示例:

"<div class="pi-tier3"><div class="pi-pdpmainbody"><p><b>FIT</b></p><p>Core Indy - Compression </p>
<p><b>PRO</b></p><ul>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
<li></li>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
</ul>
<p><b>PRP</b></p><ul>
<li>100%</li>
<li>DRY</li>
</ul>
<p>ABCDEF:PmId12345RmLn1VlId0</p>
</div></div>"

结果应如下所示:

"<div class="pi-tier3"><div class="pi-pdpmainbody"><p><b>FIT</b></p><p>Core Indy - Compression </p> <p><b>PRO</b></p><ul> <li>ABCDEF:PmId12345RmLn1VlId0</li> <li>ABCDEF:PmId12345RmLn1VlId0</li> <li>ABCDEF:PmId12345RmLn1VlId0</li> <li></li> <li>ABCDEF:PmId12345RmLn1VlId0</li> </ul> <p><b>PRP</b></p><ul> <li>100%</li> <li>DRY</li> </ul> <p>ABCDEF:PmId12345RmLn1VlId0</p> </div></div>"
4

2 回答 2

2

因为您正在使用 xml 样式的文档。您可以使用 xmlserializer 删除所有缩进和行。注意输入数据必须是有效的 xml。

select xmlserialize( content xmltype(your_clob_with_valid_xml) 
                    as clob  NO INDENT )from dual;

和真正的例子。

select xmlserialize( content xmltype('<div class="pi-tier3"><div class="pi-pdpmainbody"><p><b>FIT</b></p><p>Core Indy - Compression </p>
<p><b>PRO</b></p><ul>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
<li></li>
<li>ABCDEF:PmId12345RmLn1VlId0</li>
</ul>
<p><b>PRP</b></p><ul>
<li>100%</li>
<li>DRY</li>
</ul>
<p>ABCDEF:PmId12345RmLn1VlId0</p>
</div></div>')   as clob  NO INDENT )from dual;

此外,使用此功能,您可以漂亮地打印 XML。替换no indetindent size = 2

于 2017-07-27T07:40:13.800 回答
0

您正在寻找一种在 Oracle CLOB 中删除 EOL 字符的方法。

尝试这样的事情:

UPDATE clob_table 
   SET clob_column = REPLACE(REPLACE(clob_column, chr(10), ''), ch(13),'')
 WHERE <my criteria>
;

请注意替换功能可能会影响您的数据库性能

于 2017-07-27T07:15:35.107 回答