【发布时间】:2019-01-09 07:39:53
【问题描述】:
我正在尝试从 Oracle 12C 数据库的 XMLTYPE COLUMN "ATTRIBUTE_XML2" STORE AS SECUREFILE BINARY XML 中提取数据。
我在我的代码中使用了这个选择查询:
select xmlserialize(document a.xmlrecord as clob) as xmlrecord from tablename
ResultSet rset = stmt.executeQuery();
OracleResultSet orset = (OracleResultSet) rset;
while (orset.next()) {
oracle.sql.CLOB xmlrecord = (oracle.sql.CLOB) orset.getClob(1);
Reader reader = new BufferedReader(xmlrecord.getCharacterStream());
}
这里“orset.getClob”在 oracle DB 中占用了更多内存,而我们在 oracle 数据库中的进程内存不足。目前我们将 XML 类型存储为 CLOB,业务有兴趣将其更改为 BINARY XML。
是否有从 oracle 结果集中检索二进制 XML 的选项?
请注意,我尝试了“orset.getClob”,这会导致内存错误,因为它将二进制 XML 更改为 clob。
还尝试使用“XMLType xml = (XMLType) orset.getObject(1);”,这工作正常,但获取 100 万条 XML 记录需要 27 分钟。
如果表类型存储是 CLOB 而不是 BINARY XML,则同样的 100 万个在 5 分钟内完成。
还有其他检索 BINARY XML 的选项吗?
【问题讨论】:
-
我已经尝试过 "InputStream is= orset.getBinaryStream("xmlrecord");"但收到错误为“无效的列类型:未为类 oracle.jdbc.driver.T4CNamedTypeAccessor 实现 getBinaryStream”
-
您是否尝试过使用列索引(
int数据类型)参数而不是列名(string数据类型)? -
尝试使用“orset.getBinaryStream(1);”得到同样的上述错误
-
您将深入了解详细信息,了解您正在使用的 Oracle 驱动程序会有所帮助。使用 Oracle 的
ojdbcdriversResultSet#getBinaryStream(int)方法对我有用,如果您使用的驱动程序不同,那么您的驱动程序中的实现似乎不支持相同的方法。
标签: java oracle12c resultset binary-xml