java.sql.sqlexception

s2j5cfk0  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(580)

我尝试在datagrip语句中使用xmlsequence:

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)

但从select的声明中我得到:

<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)

我在网上找不到这个问题,所以也许这里有人知道我怎么解决这个问题?谢谢你的帮助

lkaoscv7

lkaoscv71#

这个 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查询的输出。

相关问题