ibatis呼叫儲存過程:返回NUMBER,對應java型別的解決辦法
我想有很多朋友會像我一樣遇到這樣的問題
首先,我們建立一個儲存過程
create or replace procedure pro_app_test(
p_userid in number,
p_pid out number,
p_paysn out varchar2
) as
BEGIN
p_pid:=123456;
p_paysn := '12323213';
END pro_app_test;
對於我們在儲存過程中,返回的是number時,我們在ibatis呼叫中,應該怎麼對應呢..
下面是ibatis中的程式碼
<parameterMap class="java.util.Map" id="pro_app_testMap">
<parameter property="p_userid" jdbcType="NUMBER" javaType="java.lang.Long" mode="IN" />
<parameter property="p_pid" jdbcType="NUMBER
<parameter property="p_paysn" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />
</parameterMap>
<procedure id="pro_app_test" parameterMap="pro_app_testMap">
{call pro_app_test(?,?,?)}
</procedure>
一般我們都會這樣把p_pid對應起來. 這樣肯定會提示錯誤:無效的列型別: -99999999
我們有兩種解決的辦法:
一: 從ibatis配置檔案中修改:把NUBER修改成INTEGER,這樣就可以了
<parameter property="p_pid" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT" />
二:儲存過程返回型別修改: 把p_pid用做VARCHAR2
create or replace procedure pro_app_test(
p_userid in number,
p_pid out varchar2,
p_paysn out varchar2
) as
BEGIN
p_pid:=123456;
p_paysn := '12323213';
END pro_app_test;
然後ibatis修改成這樣:
<parameter property="p_pid" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />
總結一點: 對於返回number的欄位,我們在ibatis裡面用jdbcType="INTEGER" 來對應.