系統從MySQL移植到Oracle的一些簡單總結

2021-05-23 07:33:36 字數 1651 閱讀 5284

公司開發的乙個專案因為號稱是跨平台,所以在交付的時候客戶要求乙個oracle版本,

1.因為oracle不支援auto_increment自動遞增,所以需要為所有設定了自動遞增的字段建立乙個sequence來實現自動遞增

2.有一些欄位在mysql中不是關鍵字,而在oracle中是關鍵字,比如size,comment,initial,user這種情況就涉及到需要修改程式**,不過後來通過查詢發現只要在加引號就可以了。

而且在建立檢視時發現 select的時候也需要加上引號,比如 select sp."comment" "comment",否則會報錯。

3.mysql的text型別在oracle中需要使用long或clob來替換,但在替換的過程中發現 乙個table只允許有乙個long的字段,所以改為用clob來替換

4.實行儲存過程的轉換,mysql和oracle的儲存過程的語法還是有較大的不同

a.引數的位置: mysql : in par_year varchar(20)   |oracle : par_year in varchar(20)

b.定義變數:   mysql : declare name varchar(20)  |oracle : name varchar(20)

c.臨時表的建立: mysql: 可以直接在儲存過程中寫建立語句    |oracle: 儲存過程裡不能直接使用ddl語句,所以只能使用動態sql語句來執行,先定義乙個變數 str:="'create global temporary table sett_dailytest(.....)"

然後用 「execute immediate str;」來呼叫。

e.儲存過程中呼叫儲存過程: mysql: 直接 call 過程名()  | oracle : 先定義字串:str:=' call proc_getinvoiceid(:param1,:param2) ';再執行「  execute immediate str using in  out projectid1,invoiceid」 ; 記得一定要帶有in out。 比如 「execute immediate str using  out rworkloads,out rlessthan,out runit ,out rnum,in taskid1,out rresult ;」

f.儲存過程名長度:oracle的長度不能大於30 ,這個問題必須修改該過程的名稱,那就還需要去修改程式的**。

g.group  by : mysql中group by後可以用別名,oracle卻不可以。而且oracle中group by後必須跟所有select中沒有參與計算的字段

5.發現在sql中有這樣乙個條件,(a.parentproject=null or a.parentproject="") ,在oracle中會提示錯誤,檢查後發現是因為oracle中是沒有''這個概念,null或者''都是用null來表示。

6.使用oracle時配置檔案中的sql語句後面不能有分號,mysql則沒有要求。

7.修改的過程中發現user這個關鍵字在查詢的時候加了引號又會報錯,應該不會是個別現象,以comment為例,測試了發現: 在建表時候如果欄位名是comment,那麼在查詢的時候加引號的話必須是"comment",用"comment"或者"comment"都會報錯。

8.mysql在insert的時候可以用value或者values,oracle只能用values.

Socket程式從windows移植到linux下

1 標頭檔案 windows下winsock.h或winsock2.h linux下netinet in.h 大部分都在這兒 unistd.h close函式在這兒 sys socket.h 在in.h裡已經包含了,可以省了 2 初始化 windows下需要用wsastartup啟動ws2 32.l...

從FSC FMS到RED5移植嚮導

這個文件描述了micromedia flash communication server flash media server2和red5 api的不同。他的目的是幫助移植現存的應用程式到red5。如果你得red5裡還沒有應用程式,請讀一下如何配置red5.xml 應用程式回叫函式 當執行服務段應用...

站點從Apache移植到Nginx遇到的問題記錄

採用root使用者登入的ftp服務上傳站點到伺服器,站點檔案的所有者為root,且檔案許可權其他組不能讀取,導致訪問網頁失敗,問題可以從nginx的故障記錄分析出 出現該問題的原因主要有兩個,1 偽靜態轉移 2 nginx的配置還不能支援path info模式 完成偽靜態轉移之後可能還是會是主頁能訪...