Объединить CLOB в одну строку - ORACLE

У меня есть поле в базе данных Oracle типа CLOB. Мне нужно объединить несколько строк этого файла в одну. Вот пример содержания:

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

person Gan    schedule 27.07.2017    source источник


Ответы (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

person Arkadiusz Łukasiewicz    schedule 27.07.2017

Вы ищете способ удалить символы EOL в Oracle CLOB.

Попробуйте что-то вроде этого:

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

Помните, что функция замены может воздействовать на производительность вашей БД

person J. Chomel    schedule 27.07.2017