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