根据Oracle PL / SQL中的模式验证XML文件
时间:2020-03-05 18:58:34 来源:igfitidea点击:
我需要针对XSD验证传入的文件。两者都将在服务器文件系统上。
我看过dbms_xmlschema
,但是在使其工作时遇到了问题。
使用某些Java会更容易吗?
我可以在数据库中放入的最简单的类是什么?
这是一个简单的例子:
DECLARE v_schema_url VARCHAR2(200) := 'http://www.example.com/schema.xsd'; v_blob bLOB; v_clob CLOB; v_xml XMLTYPE; BEGIN begin dbms_xmlschema.deleteschema(v_schema_url); exception when others then null; end; dbms_xmlschema.registerSchema(schemaURL => v_schema_url, schemaDoc => ' <xs:schema targetNamespace="http://www.example.com" xmlns:ns="http://www.example.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="3.0"> <xs:element name="something" type="xs:string"/> </xs:schema>', local => TRUE); v_xml := XMLTYPE.createxml('<something xmlns="http://www.xx.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/schema.xsd"> data </something>'); IF v_xml.isschemavalid(v_schema_url) = 1 THEN dbms_output.put_line('valid'); ELSE dbms_output.put_line('not valid'); END IF; END;
这将产生以下错误:
ORA-01031: insufficient privileges ORA-06512: at "XDB.DBMS_XDBZ0", line 275 ORA-06512: at "XDB.DBMS_XDBZ", line 7 ORA-06512: at line 1 ORA-06512: at "XDB.DBMS_XMLSCHEMA_INT", line 3 ORA-06512: at "XDB.DBMS_XMLSCHEMA", line 14 ORA-06512: at line 12
解决方案
回答
如果我没记错的话,如果未正确安装XDB(Oracle的XML DataBase软件包),则会出现该错误消息。让DBA检查一下。
回答
一旦解决了安装问题,当架构变大时,尤其是当架构包含其他架构时,某些Oracle版本就会面临挑战。我知道我们在9.2中遇到了这个问题,不确定是10.2还是11.
但是,对于像示例这样的小型模式,它应该可以正常工作。