甲骨文 xmlsequence - java.sql.SQLException
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)
但是从 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)
我在网上找不到这个问题,也许这里有人知道我该如何解决这个问题?
感谢您的帮助
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 查询的输出。
我尝试在这个语句中使用 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)
但是从 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)
我在网上找不到这个问题,也许这里有人知道我该如何解决这个问题? 感谢您的帮助
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 查询的输出。