發表文章

目前顯示的是 4月, 2012的文章

微軟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