2012-11-22 70 views
0

我在Oracle數據庫的表中有一個XML列,出於某種原因,我意識到XML標記在最後被破壞。Oracle表中的XML標記破壞

<XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML> 
<Framework.DesktopContent.ImageLocation ObjectName="PaneContentImageSelected" locati... 

我可以知道是否可以在「...」不在標籤中的XML列中搜索「...」嗎?我想淘汰破損的XML,而不必清除整個表格。

在此先感謝!

+0

是它的XML是syntatically無效的,你想找到的所有非語法有效XMLS(如果是的話我假設你的專欄是CLOB/varchar2類型而不是XMLType) – DazzaL

+0

是的,XML列是CLOB(爲了歷史的緣故)。 – feef24

回答

3

如果發現和無效個XML,你可以這樣做:

SQL> desc myxml 
Name          Null? Type 
----------------------------------------- -------- -------- 
XML            CLOB 

SQL> create or replace function is_valid(xml clob) return varchar2 
    2 is 
    3 e_invalid exception; 
    4 pragma exception_init(e_invalid, -31011); 
    5 v_xml xmltype; 
    6 begin 
    7 v_xml := xmltype(xml); 
    8 return 'Y'; 
    9 exception 
10 when e_invalid 
11 then 
12  return 'N'; 
13 end; 
14/

Function created. 

SQL> select * from myxml; 

XML 
-------------------------------------------------------------------------------- 
<XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML> 
<Framework.DesktopContent.ImageLocation ObjectName="PaneContentImageSelected" lo 
cati.. 

<XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML></XMLBegin> 

SQL> select * from myxml where is_valid(xml) = 'N'; 

XML 
-------------------------------------------------------------------------------- 
<XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML> 
<Framework.DesktopContent.ImageLocation ObjectName="PaneContentImageSelected" lo 
cati.. 
+0

哇!對於那些在XML上工作的人來說,這是一件非常棒的事情!謝謝,@DazzaL! – feef24