貼代碼:
<select id="getInfo" parameterClass="java.util.HashMap" resultClass="java.util.HashMap">
<isEqual property="Type" compareValue="02">
select a.*
from INFO a
where
a.TYPE= #Type#
</isEqual>
<isEqual property="Type" compareValue="01">
select a.*
from INFO a
where
a.TYPE= #Type#
and to_number(a.END) >= to_number(#No#)
</isEqual>
</select>
當Type為01的時候報錯:ORA-01722: 無效數字,,目標鎖定and to_number(a.END) >= to_number(#No#)
但是將SQL復制到數據庫執行的時候是可以的
問題原因:
在Type為02的時候a.END里面包含字符,Type為01的時候a.END里面只有數字
因為oracle條件是從下往上篩選的,所以to_number(a.END)在a.TYPE= #Type#之前,導致無效數字錯誤
處理方式:
將a.TYPE= #Type#條件放到最后
同理:篩選范圍最大的條件應該放在最后面,提高執行效率
求解:
將SQL復制到數據庫執行的時候不管條件是如何順序都是可以的
如果有人知道的還請指教