1

true/false 値を返す 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 で使用できるブール値がありますが、ref カーソルでそれを返すことも、'Boolean 型の列を宣言することもできません)。 '。

参照カーソルにブール値が含まれていると言っているように聞こえますか? はいの場合は、「Y」または「N」などを返す必要があります。ストアド プロシージャのソース/署名を投稿することを検討してください。回答に役立ちます。

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

トム・カイトの伝統的に生意気な反応: You Asked

これはトムのための本当に短いものです:

Oracle RDBMS に boolean データ型がないのはなぜですか?

そして私たちは言った...

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

同じ目的を果たし、同じ量のスペースを必要とし、同じことを行います.

つまり、ブール値である「アクセス」の列から何が返されますか? 真/偽。Y/N を提供します。TRUE/FALSE が必要な場合は、DECODE(flag,'Y','TRUE','N','FALSE') で簡単に実現できます。

于 2009-11-02T04:11:18.257 に答える