отображение iBatis для курсора оракула - PullRequest
1 голос
/ 02 ноября 2009

У меня есть следующее отображение iBatis для хранимой процедуры Oracle, которая возвращает значение 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 Ответ

4 голосов
/ 02 ноября 2009

Возвращает логический тип , который не поддерживается Oracle JDBC . Точнее, его нельзя использовать ни в одном наборе результатов в Oracle (есть логическое значение, которое можно использовать в PL / SQL, но вы не можете вернуть его в виде курсора ссылки или объявить столбец типа 'Boolean'). '.

Похоже, вы говорите, что ваш ref-курсор содержит логическое значение? Если да, вам нужно будет вернуть «Y» или «N» или что-то подобное. Пожалуйста, рассмотрите возможность размещения источника / подписи хранимой процедуры - это поможет с ответом.

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

традиционно дерзкий ответ Тома Кайта : Вы спросили

Вот тебе короткий том, Том:

Почему СУБД Oracle не имеет логический тип данных?

и мы сказали ...

с тех пор ..., флаг char (1) check (флаг в ('Y', 'N')), ...,

служит той же цели, требует такое же количество места и делает то же самое вещь - я думаю, мы чувствуем, что это особенность, которую мы можем позволить им иметь, что мы действительно не нужно.

Я имею в виду - что вы получаете от столбец в "доступе", который является логическим? ИСТИНА / ЛОЖЬ. Мы дадим вам Y / N - если вы хотите TRUE / FALSE, мы можем сделать это легко с ДЕКОДИРОВАНИЯ (флаг, 'Y', 'TRUE', 'N', 'FALSE') * +1025 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...