1. 程式人生 > 其它 >Oracle系列---【ORA-00909:引數個數無效 SQL模糊查詢報:ORA-00909:引數個數無效問題的解決】

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}),'%')