關於Ibatis 轉換 oracle date型別的問題

aaqwsh發表於2012-01-05

最近遇到兩個關於Ibatis 轉換date型別的問題,記錄一下:

sql_text:
 select distinct t.cc                from aa t                 
 where t.update_time > :1 and t.update_time < :2       

Optimizer Plan:
-----------------------------------------------------------------------------------------------------------
| Operation                         |  Name                        |  Rows | Bytes|  Cost  | Pstart| Pstop |
------------------------------------------------------------------------------------------------------------
| SELECT STATEMENT                  |                              |       |      | 226780 |       |       |
| HASH UNIQUE                       |                              |     5K|   72K| 226780 |       |       |
|  FILTER                           |                              |       |      |        |       |       |
|   TABLE ACCESS FULL               |AA                            |    69K|  949K| 226774 |       |       |
------------------------------------------------------------------------------------------------------------


開始一看以為是沒建索引,但是發現索引是存在的,同時explain plan 發現走的也是正確的執行計劃。
懷疑是統計資訊的問題,於是重新收集了統計資訊,並重新生成了執行計劃,但是還是同樣的。因為那天通宵了一夜,
頭腦比較暈,沒明白是怎麼回事。

回家後仔細看了一下v$sql_plan ,發現如下資訊:
(INTERNAL_FUNCTION("S"."UPDATE_TIME")>=:1 AND INTERNAL_FUNCTION("S"."UPDATE_TIME")<:2>

表示oracle對這個欄位做了轉換後再去比較,於是懷疑應用裡的型別不對,開發同事提供瞭如下sql,雖然他傳入配置檔案的屬性是date型。
但是IbatiS並沒有轉換成oracle能識別的date型:
 select distinct t.cc                from aa t                 
 where t.update_time > #startTimeStr# and t.update_time < #endTimeStr#       

於是通知開發修改語句:
update_time >= to_date(#startTimeStr#,'yyyy-mm-dd hh24:mi:ss') and update_time < to_date(#endTimeStr#,'yyyy-mm-dd hh24:mi:ss')

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758322/viewspace-714469/,如需轉載,請註明出處,否則將追究法律責任。

相關文章