2017-07-27 171 views
0

我在CLOB類型的Oracle數據庫中有字段。我需要將這個字段的多行合併成一行。以下是內容的一個例子:將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>" 

回答

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

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