Oracle與Sql server都遵循SQL-92標準:http://owen.sj.ca.us/rkowen/howto/sql92F.html,但是也有一些不同之處,差別如下:
- Oracle中表名,欄位名,預存程序名,變數名不能超過30個字串長度。
- Oracle中不支援Top 文法。使用whererownum < n 代替。但需要注意如果在Top前有排序的操作,則需要先排序在利用rownum取得。
- Oracle中游標的使用與SqlServer中有挺大差別,主要是在迴圈控制方面不一致。
- 在Oracle中如果某列是Date類型,那麼它預設的格式是yyyy-MM-dd,如果使用where colDate = ‘2005-06-08 17:14:57’就會出錯,‘2005-06-08’可以。如果此時需要精確比較時間(小時,分,秒),可以採用下列方法:TO_DATE('2005-6-8 17:14:57','yyyy-mm-dd hh24:mi:ss')。由於Oracle和SQLServer在DateTime上對SQL標準的拓展實現方式不同,因此不能用同一個SQL實現。
- Oracle中的TimeStamp(時間戳記)與SqlServer中的差別很大。SqlServer中的TimeStamp是二進位格式儲存在資料庫中,可以將DataSet中的這個欄位類型設定為base64Binary類型。Oracle中的TimeStamp是時間格式儲存的。因此,無法用同一個DataSet既裝載SqlServer的TimeStamp,有裝載Oracle的TimeStamp.由於在應用程式中很少用到這個值,因此可以不檢索這個欄位。
- Oracle中的TimeStamp不能像SqlServer在傳入資料的時候自動填滿,可以設定預設值systimestamp來實作類別似功能。
- Oracle中沒有Boolean的欄位類型,可以用intger或者char代替SqlServer中的bit類型。
- Oracle中會將””Null 字元串當多NULL處理,也就是說,當應用程式往資料庫中插入一個Null 字元串時,實際資料庫會嘗試插入一個NULL。如果這個欄位是NOTNULL類型,那麼就會出錯,這種情況下可以用別的預設值代替Null 字元串。當從SqlServer匯入資料到Oracle的時候,在NOTNULL列上的Null 字元串會導致匯出操作失敗。此時可以在匯出嚮導中手工修改SQL指令碼,將Null 字元串設定成一個特殊值。
- Oracle中不支援,SELECT . . INTO建立新表,要用CREATE TABLE 表名AS SELECT 語句 ,建立新表。
- 在Oracle中連接字串用 ‘||’ 或CONCAT(COL1,COL2)函數,不能使用‘+’。
- 統配符 [],[^] ,Oracle好像也不支援。