Отображение iBatis для курсора оракула

У меня есть следующее сопоставление 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:

Что я делаю неправильно? можем ли мы не хранить логическое значение непосредственно в курсоре?


person Omnipresent    schedule 02.11.2009    source источник


Ответы (1)


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

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

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

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

Вот очень короткий для вас, Том:

Почему в Oracle RDBMS нет логического типа данных?

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

так как ..., флаг char(1) проверить (флаг ('Y', 'N')), ...,

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

Я имею в виду, что вы получаете из столбца в «доступе», который является логическим? ИСТИНА / ЛОЖЬ. Мы дадим вам Y/N -- если вы хотите ИСТИНА/ЛОЖЬ, мы можем легко сделать это с помощью DECODE(flag,'Y','TRUE','N','FALSE')

person Brian    schedule 02.11.2009