Oracle XMLDB的XMLCAST和XMLQUERY与iBatis不兼容?

问题描述 投票:1回答:1

我一直在尝试从存储在XML文件中的XML中选择值列表XMLType列,但我不断收到列在其中的错误这篇文章的尾巴。

选择ID为

getXMLFragment

,以及相关的子集sqlmap.xml如下:

<select id="getXMLFragment" resultClass="list">
               SELECT
                   XMLCAST(XMLQUERY('$CUSTOMER/CUSTOMER/DETAILS/
CUST_NAME/text()' PASSING CUSTOMER AS
                       "CUSTOMER" RETURNING CONTENT) AS VARCHAR2(20))
AS customers FROM SHOP.CLIENT_INFO
</select>

((CUSTOMER是CLIENT_INFO中的XMLType列)

并且我使用以下方式调用该语句

List<String> custNames= (List<String>)
sqlMap.queryForList("getXMLFragment");

我正在使用ibatis-2.3.4.726.jar。

是因为iBatis无法识别XMLDB查询,因此,错误地将字符串标记化?在旁注中,我已经实现了XMLTypeCallback.java成功处理XMLType插入,我认为如果我希望检索整个XML,它将起作用。然而,在这种情况下,由于以下原因,我只需要提取单个值:要求。一种解决方法将不胜感激。

提前感谢。

生成的异常在下面列出:

--- The error occurred in sqlMap.xml.
--- The error occurred while preparing the mapped statement for
execution.
--- Check the getXMLFragment.
--- Check the SQL statement.
--- Cause: java.util.NoSuchElementException
       at
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:
204)
       at
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:
139)
       at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:
567)
       at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:
541)
       at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:
118)
       at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:
122)
       at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:
98)
       at Main.main(Main.java:60)
Caused by: java.util.NoSuchElementException
       at java.util.StringTokenizer.nextToken(StringTokenizer.java:332)
       at
com.ibatis.sqlmap.engine.mapping.sql.simple.SimpleDynamicSql.processDynamicElements(SimpleDynamicSql.java:
90)
       at
com.ibatis.sqlmap.engine.mapping.sql.simple.SimpleDynamicSql.getSql(SimpleDynamicSql.java:
45)
       at
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:
184)
       ... 7 more
oracle ibatis xmltype
1个回答
0
投票

更新:我们只需要重复一次'$',以使sql为“ .... XMLQUERY('$$ CUSTOMER .....”,此后分词工作正常,并且查询成功执行。

© www.soinside.com 2019 - 2024. All rights reserved.