我有一个函数在pl / sql中返回一个布尔值.我试过了
直接获取该布尔值但没有成功,所以现在我正在尝试将其转换为字符串(我不想修改数据库):
<parameterMap id="publicObject" type="map"> <parameter javaType="java.lang.Object" jdbcType="VARCHAR" mode="OUT" property="result" /> <parameter javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" property="id" /> </parameterMap> <select id="isPublicObject" parameterMap="publicObject" statementType="CALLABLE"> <![CDATA[ { declare v_bool BOOLEAN := TRUE; begin v_bool := PACKNAME.STF$IS_PUBLIC_OBJECT(#{id}); #{result} := CASE WHEN v_bool THEN 'TRUE' ELSE 'FALSE' END; end; } ]]> </select>
然后我得到这个例外:
“查询数据库时出错.原因:org.apache.ibatis.type.TypeException:使用JdbcType OTHER为参数#2设置null时出错.尝试为此参数设置不同的JdbcType或不同的jdbcTypeForNull配置属性.原因:java.sql.SQLException :列类型无效:1111 ####
此代码在数据库中正常工作:
declare v_bool BOOLEAN := TRUE; v_str VARCHAR2(5); begin v_bool := PACKNAME.STF$IS_PUBLIC_OBJECT('000000'); v_str := CASE WHEN v_bool THEN 'TRUE' ELSE 'FALSE' END; dbms_output.put_line('result:'); dbms_output.put_line(v_str); end;
解决方法
我写了parameterType&地图示例.它适用于我的测试数据.
XML:
<update id="isPublicObject" parameterType="map" statementType="CALLABLE"> declare v_bool BOOLEAN := TRUE; begin v_bool := PACKNAME.STF$IS_PUBLIC_OBJECT(#{id}); #{result,jdbcType=VARCHAR,mode=OUT} := CASE WHEN v_bool THEN 'TRUE' ELSE 'FALSE' END; end; </update>
制图员:
public interface PLSQLMapper { public void isPublicObject(Map<String,Object> parameterMap); }
主要:
PLSQLMapper mapper = session.getMapper(PLSQLMapper.class); Map<String,Object> parameterMap = new HashMap<String,Object>(); parameterMap.put("id",1); mapper.isPublicObject(parameterMap); System.out.println("result: " + parameterMap.get("result"));