oracle游标的iBatis映射

时间:2009-11-02 03:43:19

标签: java oracle ibatis

我有一个Oracle Stored Procedure的iBatis映射,它返回一个true / false值。

  <resultMap id="isAuthorizedResult" class="java.lang.Boolean">
    <result property="isAuthorized" column="isAuthorized"/>
  </resultMap>
  <parameterMap id="isAuthorizedCall" class="map">
    <parameter property="prgType" jdbcType="String" javaType="java.lang.String" mode="IN"/>
    <parameter property="parCode" jdbcType="String" javaType="java.lang.String" mode="IN"/>
    <parameter property="userId" jdbcType="String" javaType="java.lang.String" mode="IN"/>
    <parameter property="Result0" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="isAuthorizedResult"/>
  </parameterMap>
<procedure id="isAuthorized" parameterMap="isAuthorizedCall">{call chk_user_ocpncy (?,?,?,?) }</procedure>

我从我的Java代码中调用映射,如下所示:

getSqlMapClientTemplate().queryForObject("reexamination.isAuthorized", paramMap);

但是,我收到以下错误...

Fail to convert to internal representation; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:

我做错了什么?我们不能直接将一个布尔值存储到游标中吗?

1 个答案:

答案 0 :(得分:4)

返回布尔类型为not supported by Oracle JDBC。或者更具体地说,它不能在Oracle的任何结果集中使用(有一个可以在PL / SQL中使用的布尔值,但是你不能在ref游标中返回它或声明一个类型为'Boolean的列'。

听起来你说你的引用游标包含布尔值?如果是,您将需要返回'Y'或'N'或类似的东西。请考虑发布存储过程的源/签名 - 这将有助于解答。

http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html#34_05

Tom Kyte的传统厚脸皮response: 你问过

  

这是一个真正的短片汤姆:

     

为什么Oracle RDBMS没有   布尔数据类型?

     

我们说...

     

因为...,标志字符char(1)检查(标志输入   ('Y','N')),...,

     

服务于同一目的,需要   相同数量的空间并做同样的事情   事 - 我想我们觉得这是一个   功能我们可以让他们拥有我们   真的不需要。

     

我的意思是 - 你从什么回来了   “访问”中的一列是一个布尔值?   真假。我们会给你Y / N -   如果您想要TRUE / FALSE,我们可以   用它轻松完成   DECODE(标志, 'Y', 'TRUE', 'N', 'FALSE')