1

我对返回真/假值的 Oracle 存储过程有以下 iBatis 映射。

  <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:

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

4

1 回答 1

4

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

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

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

汤姆凯特传统上厚颜无耻的回应:你问

这是给你的一个真正简短的汤姆:

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

我们说...

因为...,flag char(1) check (flag in ('Y', 'N')), ...,

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

我的意思是-您从“访问”中的布尔值列中得到什么?真假。我们会给您 Y/N——如果您想要 TRUE/FALSE,我们可以使用 DECODE(flag,'Y','TRUE','N','FALSE') 轻松完成

于 2009-11-02T04:11:18.257 回答