我有一个spring应用程序,它需要使用XML参数执行存储过程。存储过程声明如下:
private class InsertXMLDataProcedure extends StoredProcedure {
public InsertXMLDataProcedure(DataSource ds) {
super(ds, PROCEDURE_NAME);
declareParameter(new SqlParameter("COMPANYNO", Types.INTEGER));
declareParameter(new SqlParameter("XMLDATA", Types.SQLXML));
declareParameter(new SqlParameter("ERRORNO", Types.INTEGER));
declareParameter(new SqlParameter("ERRORDESC", Types.VARCHAR));
compile();
}
public Map<String, Object> execute(int companyNumber, String xmlData, int errorNumber, String errorDescription) {
return super.execute(companyNumber, xmlData, errorNumber, errorDescription);
}
}
但是,XML输入没有插入到表中。显然,Oracle需要特定于供应商的配置设置来识别输入。
发布于 2015-01-23 09:35:59
好的,所以修复这是一个小的依赖令人厌恶,因为Oracle的拜占庭图书馆出版习惯。
这样的代码更改相对较少:
private class InsertXMLDataProcedure extends StoredProcedure {
public InsertXMLDataProcedure(DataSource ds) {
super(ds, PROCEDURE_NAME);
declareParameter(new SqlParameter("COMPANYNO", Types.INTEGER));
declareParameter(new SqlParameter("XMLDATA", OracleTypes.OPAQUE, "SYS.XMLTYPE"));
declareParameter(new SqlParameter("ERRORNO", Types.INTEGER));
declareParameter(new SqlParameter("ERRORDESC", Types.VARCHAR));
compile();
}
public Map<String, Object> execute(int companyNumber, String xmlData, int errorNumber, String errorDescription) {
return super.execute(companyNumber, new OracleXmlTypeValue(xmlData), errorNumber, errorDescription);
}
}
基本上可以归结为将参数类型更改为:
new SqlParameter("XMLDATA", OracleTypes.OPAQUE, "SYS.XMLTYPE")
并将xml包装到OracleXmlTypeValue
对象中。
这两种方法都可以在spring的扩展中获得。编写本报告时的maven依赖项如下:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-oracle</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
这是很简单的一点。您还必须提供一组jars来完成这项工作。它们不在任何maven存储库中,您必须在本地安装它们,或者将它们上传到本地附件中。
有关的罐子是:
xdb6.jar可从位于http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html的Oracle驱动程序下载页面的(OTN)获得。
找到xmlparserv2.jar要困难得多。如果幸运的话,您将在数据库机器上的{ORACLE_HOME}/oracle/produce/{VERSION_NUMBER}/lib/xmlparserrv2.jar
中找到它。如果不是,就像我一样,您会发现它与Jdeveloper一起打包,可以在这里获得:http://www.oracle.com/technetwork/developer-tools/jdev/downloads/index.html --您应该选择Java,jar在modules/oracle.xdk_12.1.3
中。
不要试图直接下载XDK,这是一个旧版本。使用该库将给java.lang.NoClassDefFoundError: oracle/xml/binxml/BinXMLMetadataProvider
。甲骨文悄然改变了xmlparserv2.jar的内容,而没有跳过这个版本;就像我说过的“拜占庭习惯”。
注:所有这些都适用于Oracle 11及更高版本。
https://stackoverflow.com/questions/28085992
复制相似问题