plsql里面執行正常,java運行報ORA-01722: 無效數字


貼代碼:

<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復制到數據庫執行的時候不管條件是如何順序都是可以的

如果有人知道的還請指教

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM