Sql 检查字符串是否为格式正确的xml

Sql 检查字符串是否为格式正确的xml,sql,xml,oracle,Sql,Xml,Oracle,我在DB中有varchar2列。此列以xml格式存储字符串。 但并非所有字符串都是格式良好的xml,其中有些字符串存在错误。 如何检查此字符串是否为格式正确的xml 如果此字符串不是格式良好的xml,则类似这样的sql查询将在运行时失败: select extractvalue(xmltype(some_table.value), 'Attachment/@category') from some_table Xml具有以下格式: <Attachment

我在DB中有varchar2列。此列以xml格式存储字符串。 但并非所有字符串都是格式良好的xml,其中有些字符串存在错误。 如何检查此字符串是否为格式正确的xml

如果此字符串不是格式良好的xml,则类似这样的sql查询将在运行时失败:

   select 
       extractvalue(xmltype(some_table.value), 'Attachment/@category')
   from some_table
Xml具有以下格式:

   <Attachment {attributes} />
每个字符串中的属性数可以不同

因此,当出现类似“asdf”的字符串时,我的查询不会失败

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

1如果确定该文件有效。 如果确定文档无效或无法确定文档的有效性,则为0。 如果验证状态为0,则XMLType方法SchemaValidateRuns验证过程,默认情况下为0。如果确定文档有效,则将验证状态设置为1。否则,状态保持为0

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

XMLType方法setSchemaValidated集合记录XMLType实例的验证状态


检查参考

这里有一个简单的函数可以为您检查它

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    

当输入字符串为'asdf'时,它不起作用;从双d中选择xmlisvalidxmltype'asdf';我认为这是最好的解决办法。但是我不能在我的项目中创建任何函数。所以我决定用regexp\u substr函数提取数据。