分析db2與oracle的差別 開發了一段時間的一個系統一直在db2上使用,終於開發的差不多,測試沒什麼大問題了。突然有一個客戶現場要求用oracle數據庫,剛開始覺得應該沒什麼問題,開發的時候雖然沒在oracle數據庫測試過,但是無非也就是一些SQL的問題,結果用oracle數據庫一發布就傻眼了,我嘞個去竟然沒有一個功能能正常運行,所有的功能進去都是空白頁面,當然報錯的都是SQL,但是這也太超乎我的想象了啊!所以還是記錄下遇到的問題吧,以後寫SQL的時候還是盡量通用,省的以後移植的時候費那麼大勁了。 1、取得系統當前日期。db2為current date 但是這個在oracle中是不適用的,oracle為sysdate。我查找資料都沒有說明db2可不可以用sysdate,但是我的db2 9.7的版本的確可以用sysdate這個函數的。所以就ok了,所有的取得系統當前日期函數都改為sysdate,適用oracle和db2。 2、日期類型字段。對於數據類型為date的字段,在db2中操作的時候不用做任何處理,可以當varchar類型的字段一樣處理。但是oracle就不能這麼干了,在查詢的時候必須用T0_CHAR(CLOMUN,'yyyy-mm-dd'),在update或者insert的時候必須用TO_DATE(CLOMUN,'yyyy-mm-dd')轉為DATE類型。在db2中也可以用to_char和to_date函數。 3、db2中的DECIMAL和oracle中的NUMBER類型。db2中的DECIMAL對應oracle中的NUMBER類型,來定義數字類型和保留幾位有效數字。例如:oracle中定義number(16,2)(四捨五入) db2中定義decimal(16,2)(會直接截取)。對於DECIMAL類型是不能把空值放進去的,如果為空則默認插入0,而且如果為10.00查詢後是可以直接顯示的,但是number類型就只顯示10所以如果要顯示10.00就需要對其進行格式化。另外number類型中是可以放空值的。 4、SQL的區別。db2和oracle中有一些SQL的區別,這個都是必然的,但是大部分的簡單SQL都還是一樣的,這裡列舉一些吧: 查詢序列 oracle: select T18_ONLINE_TASKFACT_TASKKEY.currval from dual(當前值) select T18_ONLINE_TASKFACT_TASKKEY.nextval from dual(下一個值) db2 select PREVVAL FOR T18_ONLINE_TASKFACT_TASKKEY from sysibm.sysdummy1 (當前值) select NEXTVAL FOR T18_ONLINE_TASKFACT_TASKKEY from sysibm.sysdummy1(下一個值) 查詢前10行數據 db2 : select * from test fetch first 10 rows only oracle: select * from test where rownum<=10