Oracle
Oracle Select with xmlquery() error - 如何忽略錯誤?
在嘗試從 Oracle DB 表中提取數據子集時,其中一列是 XMLType,它是使用**xmlquery()**提取的以獲取相關資訊。
問題在於 XML 數據來自外部來源,這通常會給我們提供帶有未轉義特殊字元的格式錯誤的 XML。
ORA-31011: XML parsing failed ORA-19202: Error occurred in XML processing LPX-00244: invalid use of less-than ('<') character (use <) Error at line 1 31011. 00000 - "XML parsing failed" *Cause: XML parser returned an error while trying to parse the document. *Action: Check if the document to be parsed is valid.
我的目的可以忽略這些行。
如何忽略這些解析錯誤並讓 Oracle 繼續執行 SQL 語句?
謝謝
我不認為你可以直接。我不知道有一種方法可以將 XML 解析器置於一種“寬鬆”模式,在這種模式下它會忽略驗證錯誤,並且您無法在純 SQL 中擷取異常。
解決這個問題的一種方法(除了騷擾您的外部源以便它們生成有效的 XML,這是解決方案)將在您儲存 XML 時對其進行驗證,並且僅處理已驗證的數據。您可以編寫簡單的 PL/SQL 程式碼。這是解決此問題的一種方法的最小範例。
範例表和數據:
create table foo(id int, xml clob, valid int default null); insert into foo(id,xml) values (1, '<?xml version="1.0"?><root><a foo="b"></a></root>'); insert into foo(id,xml) values (2, '<?xml version="1.0"?><root><a foo="<"></a></root>'); commit;
驗證功能:
create function is_valid_xml(xml_param clob) return int as scratch xmltype; begin select xmltype(xml_param) into scratch from dual; return 1; exception when others then return 0; end; /
應用驗證功能
SQL> update foo set valid = is_valid_xml(xml) where valid is null; 2 rows updated. SQL> select id, valid from foo; ID | VALID ---------- 1 | 1 2 | 0
然後,您可以根據您的常用標準和
valid
列進行查詢/報告。