Sql 检查字符串是否为格式正确的xml
我在DB中有varchar2列。此列以xml格式存储字符串。 但并非所有字符串都是格式良好的xml,其中有些字符串存在错误。 如何检查此字符串是否为格式正确的xml 如果此字符串不是格式良好的xml,则类似这样的sql查询将在运行时失败: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
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函数提取数据。