我寫了下面的SQL Statment在iBatis的版本2:如何處理SQL Select語句(IBatis 2)中的Empty IN子句?
<select id="mySelect" resultClass="long" >
SELECT COUNT(*)
FROM myTable
WHERE myTable.columnA IN
<iterate property="myInClauseValues" open="(" close=")" conjunction=",">
#myInClauseValues[]#
</iterate>
</select>
這種說法能正常工作,如果myInClauseValues(這是一個長的ArrayList)包括至少一個值。但是,如果myInClauseValues是空的,我得到這樣的錯誤信息(使用Oracle數據庫I'm):
Check the statement (query failed).
Cause: java.sql.SQLException: ORA-00936: Expression is missing
你不能有一個空的'in'。檢查你的數組的大小,不要把它添加它是空的 – 2015-02-06 06:33:02
我同意@juergen d。檢查數組列表是否爲空,並且如果不是,則只執行查詢。由於無論如何查詢都會返回無結果的結果,因此最好不要一無所獲地返回數據庫。 如果出於某種瘋狂的原因不是一種選擇,那麼當數組列表爲空時,您可以嘗試在IN子句的括號之間獲得'null'。這樣查詢也只會返回零結果。 – Tarske 2015-02-06 06:35:06