java - Oracle xmlsequence - java.sql.SQLException
问题描述
我尝试在此语句中使用 xmlsequence 和 datagrip:
select xmlsequence(extract(river, '/river/cities/*'))
from river_xml
where extractValue(river, '/river/name/text()')='Rhein';
输出很好:
2020-06-18 19:09:36] 1 row retrieved starting from 1 in 38 ms (execution: 0 ms, fetching: 38 ms)
但从我得到的选择语句中:
<failed to load>
java.sql.SQLException: Interner Fehler: makeJavaArray doesn't support type 2007
at oracle.sql.ArrayDescriptor.makeJavaArray(ArrayDescriptor.java:1075)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81ImgBodyElements(OracleTypeCOLLECTION.java:571)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81ImgBody(OracleTypeCOLLECTION.java:527)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unpickle81(OracleTypeCOLLECTION.java:339)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unlinearizeInternal(OracleTypeCOLLECTION.java:235)
at oracle.jdbc.oracore.OracleTypeCOLLECTION.unlinearize(OracleTypeCOLLECTION.java:214)
at oracle.sql.ArrayDescriptor.toJavaArray(ArrayDescriptor.java:790)
at oracle.sql.ARRAY.getArray(ARRAY.java:301)
in JdbcHelperImpl.wrapIfNeeded(JdbcHelperImpl.java:461)
我在互联网上找不到这个问题,所以也许这里有人知道我该如何解决这个问题?谢谢你的帮助
解决方案
,xmlsequence
和函数都已弃用extract
。extractvalue
目前,您得到的结果是 XMLSEQUENCETYPE 类型的单个集合,该集合的每个元素都是一个城市节点。大概是 DataGrip 不满意的集合类型。
您可以xmltable
改用,这将为您提供每个城市一行的结果:
select x.*
from river_xml r
cross join xmltable(
'/river[name="Rhein"]/cities/city'
passing r.river
columns city xmltype path '.'
) x;
如果需要,您可以调整它以在单独的列中获取有关城市的信息,而不是作为 XMLType 值;这取决于你对结果做了什么。
db<>fiddle似乎也不知道如何处理 XMLSEQUENCETYPE,这很公平;但您可以看到 XMLTable 查询的输出。
推荐阅读
- javascript - 当我从 SQL 表中选择 empName 时,我想更新 HTML empID 字段
- javascript - 如何在 vuex 的挂载函数中访问存储数据
- java - 如何将文件字节数组从 Java 传递到 .Net API 并将字节数组恢复到文件
- powershell - 有什么方法可以根据运行进程的 PID 定义 System.Diagnostics.ProcessStartInfo 对象?
- android - 加速度计中的传感器批处理
- mysql - 使用最大和时间总和检索记录,如果不同用户的时间相同,则获取创建日期最近的记录
- google-apps-script - 如何垂直构建多张带有照片和姓名(CardHeaders)的卡片以显示多个用户详细信息?
- python - 检查Json数据在python中是没有的
- php - 隐藏短代码循环中的缺货变化
- amazon-web-services - Kinesis 代理未通过 firehose 发送 .log 文件