Oracle系列---【ORA-00909:參數個數無效 SQL模糊查詢報:ORA-00909:參數個數無效問題的解決】


1.問題

  oracle在做模糊查詢時,使用了a.name like concat('%',#{name},'%'),結果報了個"ORA-00909:參數個數無效 "。

2.分析

  回想以前用Mysql的時候就是這樣用的,沒有問題,在這里就出問題了,所以確定問題在oracle數據庫上,經過查詢得知,oracle和mysql的concat函數不太一樣。

  一、函數的使用參數不同

    Mysql支持多個字符串拼接:

    CONCAT(str1,str2,…)

    Oralce只支持兩個字符串的拼接,若想拼接多個字符串可以嵌套使用concat

    CONCAT(str1,str2)

  二、參數中有Null的處理方式不同

    Mysql:返回結果為連接參數產生的字符串。如有任何一個參數為NULL ,則返回值為 NULL。

    Oralce:如有任何一個參數為NULL ,則返回值拼接后的字符串。
  三、其它方面

    Mysql:如果所有參數均為非二進制字符串,則結果為非二進制字符串。
    如果自變量中含有任一二進制字符串,則結果為一個二進制字符串。
    Oracle:如果CONCAT中連接的值不是字符串,Oracle會嘗試將其轉換為字符串
    注:Oracle拼接字符串還可以使用"||",當參數為Null時,返回值拼接后的字符串。

3.解決方案

  a.name like concat('%',#{name},'%')  改成  a.name like concat(concat('%',#{name}),'%')


免責聲明!

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



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