oracle轉mysql總結

來源:互聯網
上載者:User

標籤:

ares-sdk初始開發測試使用的是oracle資料庫,由於寧波通商的特殊需要,必須把資料庫環境從oracle轉向mysql。 現對轉換過程中出現的問題及經驗總結如下:

主鍵建置原則

建立一個專門記錄序列的表sequence,記錄有當前序號,序列的間隔如+1

建立記錄當前序列的表DROP TABLE IF EXISTS sequence;CREATE TABLE sequence (name              VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment       INT NOT NULL DEFAULT 1,PRIMARY KEY (name)) ENGINE=InnoDB;INSERT INTO sequence VALUES (‘MovieSeq‘,3,5);
建立一個擷取當前序列的functionDROP FUNCTION IF EXISTS currval;CREATE FUNCTION currval (seq_name VARCHAR(50))RETURNS INTEGERCONTAINS SQLBEGIN  DECLARE value INTEGER;  SET value = 0;  SELECT current_value INTO value  FROM sequence  WHERE name = seq_name;  RETURN value;END;
擷取下一個數值..先在sequence裡面調用update當前最大數值+1然後再調用currval獲得當前數值DROP FUNCTION IF EXISTS nextval;DELIMITER $CREATE FUNCTION nextval (seq_name VARCHAR(50))RETURNS INTEGERCONTAINS SQLBEGIN   UPDATE sequence   SET          current_value = current_value + increment   WHERE name = seq_name;   RETURN currval(seq_name);END$DELIMITER ;
DROP FUNCTION IF EXISTS setval;DELIMITER $CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)RETURNS INTEGERCONTAINS SQLBEGIN   UPDATE sequence   SET          current_value = value   WHERE name = seq_name;   RETURN currval(seq_name);END$DELIMITER ;

如果以上語句執行有異常請先執行這句:set global logbintrustfunctioncreators=TRUE;

插入時的主鍵產生:
mysql:  SELECT MMC.NEXTVAL(‘SEQ_MD_ENTITY_ATTRIBUTE‘)oracle: select MMC.SEQ_MD_ENTITY_ATTRIBUTE.nextval from dual
日期處理
mysql : DATE_FORMAT(NOW(),‘%Y-%m-%d  %H:%i:%s‘)oracle:  TO_CHAR(SYSDATE,‘YYYY-MM-DD hh24:mi:ss‘)
nvl函數
mysql: ifnull(A.USER_KPI,0)oracle: NVL(A.USER_KPI,0)
to_number
oracle 的 to_numbermysql不需要
關鍵字、保留字
涉及到關鍵字,mysql關鍵字需要加上``號mysql:  PARA_VALUE as `KEY`  oracle : PARA_VALUE as KEY
rownum
Unknown column ‘rownum‘ in ‘where clause‘oracle自訂sql中如果使用了rownum=1   mysql中可以寫成limit 1
大小寫問題
在oracle中一般情況下不區分大小寫但在MySQL中,所使用作業系統的大小寫敏感性決定了資料庫名和表名的大小寫敏感性。解決的辦法是把mysql的資料庫名和oracle的大小寫保持一致,表名與應用程式中sql字串中的表名保持一致,如果應用程式中欄位名用了雙引號,那請把sql中的欄位名大小寫與雙引號裡的字元保持一致。如果你的應用程式所引用的表名、欄位沒有統一大小寫,那麻煩就大了。
字串截取
mysql:  截取log_data從逗號開始之後的字元:SELECT substring_index(log_data,‘,‘,-1)  FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;截取log_data從逗號開始之前的字元:SELECT substring_index(log_data,‘,‘,1)  FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;oracle : 截取log_data從逗號開始之後的字元:SELECT SUBSTR(log_data, INSTR(log_data, ‘,‘, 1, 1) +1) AS app_ver_id  FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;截取log_data從逗號開始之前的字元:SELECT SUBSTR(log_data,0,INSTR(log_data, ‘,‘, 1, 1) - 1) AS app_ver_id  FROM nbts.log where event_id=‘150002‘ and log_id =‘a2a421734c7e47dd8a8b‘;
字串格式化
mysql:CONCAT   oracle:TO_CHAR
主鍵長度問題
在遷移到mysql後可能會出現主鍵長度太短,需要增加長度。


http://www.cnblogs.com/kunpengit/p/4462656.html

oracle轉mysql總結(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.