Oracle系列---【ORA-00909:引數個數無效 SQL模糊查詢報:ORA-00909:引數個數無效問題的解決】
阿新 • • 發佈:2022-03-22
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}),'%')