将CLOB合并为一行 - ORACLE

时间:2017-07-27 07:02:55

标签: oracle clob string-operations

我在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>"

2 个答案:

答案 0 :(得分: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 indet替换为indent size = 2

答案 1 :(得分:0)

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

尝试这样的事情:

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

请注意,替换功能可以有impacts on your db performance