2009-11-02 7 views
1

J'ai le mappage iBatis suivant pour une procédure stockée Oracle qui renvoie une valeur true/false.Mappage iBatis pour le curseur Oracle

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

J'appelle la mise en correspondance de mon code Java comme ceci:

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

Cependant, je reçois l'erreur suivante ...

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

Qu'est-ce que je fais mal? ne pouvons-nous pas stocker une valeur booléenne directement dans le curseur?

Répondre

4

Renvoyer un type booléen est not supported by Oracle JDBC. Ou plus précisément, il ne peut pas être utilisé dans un ensemble de résultats dans Oracle (il existe un booléen qui peut être utilisé dans PL/SQL, mais vous ne pouvez pas le renvoyer dans un curseur ref ou déclarer une colonne de type booléen Il semblerait que vous disiez que votre curseur de référence contient des booléens? Si oui, vous devrez retourner 'Y' ou 'N' ou quelque chose de similaire .. S'il vous plaît envisager d'afficher la source/signature de la procédure stockée - qui va aider à la réponse

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

Tom Kyte traditionnellement effronté response. Vous nous avez demandé

est ici un vrai court pour vous Tom:

Pourquoi ne pas SGBDR Oracle ont un de type booléen?

et nous avons dit ...

depuis ..., drapeau char (1) chèque (drapeau dans ('Y', 'N')), ...,

sert la même but, nécessite la même quantité d'espace et fait la même chose - je pense que nous pensons que c'est une fonctionnalité , nous pouvons les laisser avoir que nous avons vraiment besoin de .

Je veux dire - qu'est-ce que vous obtenez d'une colonne dans "accès" qui est un booléen? VRAI/FAUX. Nous vous donnerons Y/N - si vous voulez VRAI/FAUX, nous pouvons accomplir cela facilement avec decode (drapeau, 'Y', 'TRUE', 'N', 'FALSE')