3

我在数据库中有 varchar2 列。此列以 xml 格式存储字符串。但并非所有字符串都是格式正确的 xml(有些有错误)。如何检查此字符串是否格式正确的 xml?

如果这个字符串不是格式良好的 xml,这样的 sql-query 将在运行时失败:

   select 
       extractvalue(xmltype(some_table.value), 'Attachment/@category')
   from some_table

xml有以下格式:

   <Attachment {attributes} />

每个字符串中的属性数量可以不同。

因此,当出现像“asdf”这样的字符串时,我的查询不会失败。

4

2 回答 2

7

这是一个简单的功能,可以为您检查它;

CREATE OR REPLACE FUNCTION isXML(xml CLOB)
RETURN NUMBER
AS
  xmldata XMLTYPE;
BEGIN
  xmldata := XMLTYPE(xml);
  return 1;
EXCEPTION
  when others then
    return 0;
END;
/

您可以将其用作;

SQL> SELECT isXML('fdjkasksdf') FROM DUAL;

ISXML('FDJKASKSDF')
-------------------
                  0

SQL> SELECT isXML('<body></body>') FROM DUAL;

ISXML('<BODY></BODY>')
----------------------
                     1    
于 2012-09-28T14:12:38.283 回答
0

Oracle SQL 函数XMLIsValid和 XMLType 方法IsSchemaValid()
无条件运行验证过程。不要记录任何验证状态。回报:

  • 1 如果文件被确定为有效。
  • 如果确定文档无效或无法确定文档的有效性,则为 0。

XMLType 方法 SchemaValidate()
如果验证状态为 0(默认情况下为 0),则运行验证过程。如果确定文档有效,则将验证状态设置为 1。(否则,状态保持为 0。)

XMLType 方法isSchemaValidated () 返回记录的 XMLType 实例的验证状态。

XMLType 方法setSchemaValidated () 设置(记录)XMLType 实例的验证状态。

检查此链接以供参考

于 2012-09-28T11:34:00.027 回答