mysql子查询sysdate_Oracle向MySQL 迁移相关事项
Oracle向MySQL 遷移相關事項
從Oracle移植到MySQL主要有六個方面的內容需要移植,一是表Table,包括表結構和數據,二是觸發器Trigger,三是存儲過程Procedure,函數function和包Package,四是任務Job,五是用戶等其他方面的移植,六是具體應用程序通過SQL語句訪問時的細節差異克服。
一、表的移植
這個部分的移植是最容易用工具實現的部分,因為很多MySQL的圖形管理工具都自帶這樣的移植工具,比如SQLYog,MySQL Administrator等。但是,這些工具的移植能力各有不同,對字段類型轉換﹑字符集等問題都有自己的處理方式,使用時請注意。
筆者使用“SQLYog Migration Toolkit”工具按提示步驟移植后,表的主要結構和數據將成功移植,主要包括表的字段類型(經過映射轉換,比如number會轉換為double,date轉換為timestamp等,請小心處理日期字段的默認值等),表的主鍵,表的索引(Oracle的位圖索引會被轉成BTree索引,另外表和字段的注釋會丟失)等信息。需要特別注意的是,Oracle的自增字段的處理。
大家知道,Oracle通常使用序列sequence配合觸發器實現自增字段,但是MySQL和SQL Server等一樣,不提供序列,而直接提供字段自增屬性。所以,請把Oracle里面的自增字段實現直接改為MySQL的字段屬性,而且,這個字段必須是主鍵(key)并且不能有默認值。
還有一個問題,如果您的應用要直接使用Oracle的某個序列,那么您只能在MySQL里面模擬實現一個,具體方法就是利用MySQL的自增字段實現的。
二、觸發器的移植
首先,MySQL在6.0以后才支持觸發器!
觸發器的移植沒有現成工具,因為兩者之間的語法差異較大,您只能通過手工對照著原來的邏輯一個一個添加。
這里要說明一下,MySQL的SQL過程語法和Oracle PL/SQL大致相同,但還是有些細微差別:1.變量聲明Declare部分,在Oracle中Declare語句位于Begin之前,在MySQl中,Declare 位于Begin之后;
2.注釋不同,在Oracle中,可用“—“注釋一行或“/* */”注釋一段,在MySQL中,需用“/* */”或“#”來注釋
3. 對觸發前后變量值的引用方法不同;在Oracle中,用:new.eid, :old.eid表示新舊值,
在MySQL中,用New.eid,old.eid表示新舊值
4. 移植中發現的問題
1)Oracle的自治事務autonomous_transaction,MySQL不支持,您必須用其他方式實現,MySQL不允許在觸發器過程中執行對觸發器所在表的操作(包括讀寫)
2)MySQL函數和trigger中不能執行動態SQL語句,也就是說,您不能在觸發器里面組合出來一個SQL字符串,然后用exec來執行
3)Oracle的表級觸發器,MySQL還不支持,所以必須改成使用行級觸發器,注意這會導致有時SQL語句的執行效率很低
三、存儲過程的移植
MySQL的過程和函數語法與Oracle類似,但還是有細微差別,除了數據類型需要轉換,還有:
1)格式不同,例如:
Oracle為:
CREATE OR REPLACE procedure procedure1(TableName in varchar2) is
總結
以上是生活随笔為你收集整理的mysql子查询sysdate_Oracle向MySQL 迁移相关事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 主键 下一个值_INNODB
- 下一篇: ssh excel 导入 mysql_s