微軟ODBC driver for oracle的問題
我知道微軟之前已宣告不再為Oracle資料庫寫driver了, 而且微軟的ODBC driver for oracle最近的版本, 也是2008年了, 距今也有4年多, 可算是很舊的。 不過, 十幾年前我開始使用微軟的ODBC driver for oracle時, 用得還很順手。和PowerBuilder配合起來也沒什麼問題, 可能我用的功能很少很單純! 後來, 碰到一些問題, 同事告訴我有一些SQL語句, 這個driver沒有辦法解析, 他的解決方法是把這個driver換掉, 換成Oracle自家寫的ODBC driver, 問題就解決了! 最近我也碰到同樣的情況: select xxx from p, e, d, s, ed, dp, ( select a, sum(hours) h from ( select a, 0 hours from p wherer y = :year union all select a, hours from pof where b between :d1 and :d2 ) group by a ) v where p.a = e.c and d.a = s.s ... and p.a = v.a 這個SQL語句, 使用微軟的ODBC driver時, 會傳回錯誤訊息ORA-01861:文字與格式字串不符, 但是把ODBC driver換成Oracle自家寫的那支, 卻會很正常的跑完, 並傳回正確的結果。那就換driver不就好了, 還有什麼好討論的呢? 問題就在於, 有些奇奇怪怪的情況下, 一定要用微軟的那支driver, 這個時候就很頭大了。 我試了一下, 發現這個SQL語句的問題在於: 1. 可能是太多層的子查詢, 2. 或者是union 3. 反正太複雜了會造成微軟那支driver出問題。 所以, 我把SQL語句改寫: select xxx from p, e, d. s. ed, dp, ( select a, sum(hours) h from pof where b between :d1 and :d2 group by a ) v where p.a = e.c and d.a = s.s ... and p.a = v.a...