Oracle xmlsequence - java. sql .SQLException - PullRequest
0 голосов
/ 18 июня 2020

Я попытался использовать 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)

Я не могу найти эту проблему в inte rnet, так что, может быть, кто-нибудь знает, как я могу ее решить? Спасибо за помощь

1 Ответ

0 голосов
/ 18 июня 2020

Функции 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.

...