0

Oracle データベースのテーブルに XML 列がありますが、何らかの理由で XML タグが末尾で壊れていることに気付きました。

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

「...」がタグに含まれていない XML 列で「...」を検索できるかどうかを知ることはできますか? 破損した XML を取り除きたいので、テーブル全体を削除する必要はありません。

前もって感謝します!

4

1 に答える 1

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..
于 2012-11-22T11:52:01.070 に答える