【问题标题】:Oracle XMLDB's XMLCAST and XMLQUERY incompatible with iBatis?Oracle XMLDB 的 XMLCAST 和 XMLQUERY 与 iBatis 不兼容?
【发布时间】:2020-01-22 13:56:36
【问题描述】:

我一直在尝试从存储在 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

【问题讨论】:

  • 更新:我们只需要重复 '$' 一次,这样 sql 就是 "....XMLQUERY('$$CUSTOMER....." 之后标记化工作正常并且查询执行成功。

标签: oracle ibatis xmltype


【解决方案1】:

更新:我们只需要重复 '$' 一次,这样 sql 就是 "....XMLQUERY('$$CUSTOMER....." 之后标记化工作正常并且查询成功执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2020-05-30
    • 2016-07-26
    • 1970-01-01
    相关资源
    最近更新 更多