2009-11-02 5 views
1

У меня есть следующее сопоставление iBatis для хранимой процедуры Oracle, которая возвращает значение true/false.iBatis mapping for oracle cursor

<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

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

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

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

Том Кайта традиционно нахальный response:. Вы просили

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

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

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

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

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

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