我在DB中有varchar2列。此列以xml格式存储字符串。 但并非所有字符串都是格式良好的xml(有些是错误的)。 我该如何检查这个字符串是否格式良好的xml?
如果此字符串形式不正确xml,则此类sql-query将在运行时失败:
select
extractvalue(xmltype(some_table.value), 'Attachment/@category')
from some_table
Xml具有以下格式:
<Attachment {attributes} />
每个字符串中的属性数可以不同。
因此,当'asdf'这样的字符串出现时,我的查询就不会失败。
答案 0 :(得分:6)
这是一个简单的功能,可以为您检查;
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
答案 1 :(得分:0)
Oracle SQL函数XMLIsValid
和XMLType方法IsSchemaValid()
无条件运行验证过程。不记录任何验证状态。返回:
XMLType方法SchemaValidate()
如果验证状态为0(默认情况下为0),则运行验证过程。如果确定文档有效,则将验证状态设置为1。 (否则,状态保持为0。)
XMLType方法 isSchemaValidated ()返回XMLType实例的记录验证状态。
XMLType方法 setSchemaValidated ()设置(记录)XMLType实例的验证状态。
检查this link以获取参考