前一陣子做乙個專案,就是把以前sqlserver的資料庫移植到oracle中,要求是在原有**的基礎上修改,使應用程式可以同時執行在兩種不同的資料庫上。這是我第一次接觸用c#操作oracle。走了不少彎路,現在把它記下來,也希望可以別人少走一些彎路。
1. oracle中表名,欄位名,儲存過程名,變數名不能超過30個字串長度。
2. oracle中不支援top 語法。使用where rownum < n 代替。但需要注意如果在top前有排序的操作,則需要先排序在利用rownum取得。
3. oracle中游標的使用與sqlserver中有挺大差別,主要是在迴圈控制方面不一致。
4. 在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實現。
5. oracle中的timestamp(時間戳)與sqlserver中的差別很大。sqlserver中的timestamp是二進位制格式儲存在資料庫中,可以將dataset中的這個字段型別設定為base64binary型別。oracle中的timestamp是時間格式儲存的。因此,無法用同乙個dataset既裝載sqlserver的timestamp,有裝載oracle的timestamp.由於在應用程式中很少用到這個值,因此可以不檢索這個字段。
6. oracle中的timestamp不能像sqlserver在傳入資料的時候自動填充,可以設定預設值systimestamp來實現類似功能。
7. oracle中沒有boolean的字段型別,可以用intger或者char代替sqlserver中的bit型別。
8. oracle中會將」」空字串當多null處理,也就是說,當應用程式往資料庫中插入乙個空字串時,實際資料庫會嘗試插入乙個null。如果這個欄位是notnull型別,那麼就會出錯,這種情況下可以用別的預設值代替空字串。當從sqlserver匯入資料到oracle的時候,在notnull列上的空字串會導致匯出操作失敗。此時可以在匯出嚮導中手工修改sql指令碼,將空字串設定成乙個特殊值。
9. 在利用oledbcommand呼叫oracle儲存過程的時候應注意,應用程式傳入引數與儲存過程中的引數是按照順序匹配而不是名稱,這一點是和sqlserver有著本質的不同。在除錯的時候如果遇到e_fail等錯誤,可以參考下列順序檢查程式。
(1)檢查應用程式傳入引數個數與儲存過程的引數個數是否一致。
(2) 檢查應用程式傳入引數的順序是否與儲存過程引數的順序一致,這一點很重要,如果不匹配很容易導致各種看似奇怪的問題。建議對相對簡單的儲存過程(單錶的增刪改)寫乙個自動生成工具來完成此操作。
(3) 檢查儲存過程是否正確。
MSSQL縱列轉橫列
在工作中我們一般會遇到將縱列轉橫列的需求,具體 1.建表 create table dbo acrosschangeendlong id int identity 1,1 not null name nvarchar 50 not null subject nvarchar 50 not null ...
git 忽略某些檔案 目錄《轉》
注意 git無法是忽略那些已經加入跟蹤的檔案的,在建立空的專案後,應首先建立.gitignore檔案。在專案的根目錄下,新建乙個檔案.gitignore。在這個檔案中,每一行對應乙個忽略規則。以 號開頭的行會被git忽略。1 忽略檔案 bak 忽略所有擴充套件名為.bak的檔案 keep.bak 但...
MSSQL 本週 本月 本年 轉 修)
本週 起 dateadd wk,datediff wk,0,getdate 1 止 dateadd wk,datediff wk,0,getdate 6 本月 起 dateadd mm,datediff mm,0,getdate 0 止 dateadd ms,3,dateadd mm,datedif...