1. 程式人生 > >oracle儲存過程轉mysql儲存過程修改方法

oracle儲存過程轉mysql儲存過程修改方法

不同資料庫的儲存過程有不同的格式,資料型別。這裡通過一個例子展示將ORACLE儲存轉化為MYSQL儲存過程的一些必須修改的地方。
ORACLE儲存過程

修改後的MYSQL儲存過程

兩者比較:

語法格式上的不同與修改:

1、CREATE OR REPLACE 改為 CREATE 和
2、入參:入參中的IN 要刪除,型別要轉換為MYSQL支援的型別,比如VARCHAR2等型別改成VARCHAR(255)等mysql型別
3、區域性變數定義:IS定義變數改為declare並移動到begin後面的行

4、異常處理: oracle中的異常處理要修改為mysql中的hanlder方式
EXCEPTION WHEN OTHERS THEN ROLLBACK;宣告方式修改為 DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
5、–註釋:要在–後增加空格 修改為 — 空格註釋
另外常見的還有,
變數的賦值 oracle的:=賦值需要改為在開頭增加set關鍵字賦值
遊標定義: CURSOR cur1 IS 遊標定義修改為mysql格式DECLARE cur1 CURSOR FOR
開啟和獲取遊標:需要修改為open cur1並增加接收的變數FETCH ur1 INTO cur1

常見函式上的不同:
1、獲取當前時間在mysql中使用NOW()函式
2、mysql不存在DECODE函式,使用IF函式或者case when來等價替換。
3、日期函式處理
to_date(UPDATEDATE,’yyyy-mm-dd hh24:mi:ss’)” 修改為對應的:date_format(UPDATEDATE, ‘%Y%m%d %H%i%s’)
時間相減使用TIMESTAMPDIFF函式,例如TIMESTAMPDIFF(SECOND,ENDDATE,NOW())
4、nvl 修改為 IFNULL
5、chr() 修改 CHAR()
6、||字串連線要改為使用CONCAT函式
7、獲取時間的毫秒數使用UNIX_TIMESTAMP,時間的加減要使用date_add和date_sub
8、decode替換為if函式,或者case when then end

語法細節上的不同:
MySQL中from 後的表如果是(select…….)這種子查詢,那麼後面必須有別名;
rownum要使用limit來設法等價替換

還有很多不能列舉,如果修改後報錯,可以根據報錯到網上查詢原因,使用二分法定位到報錯的行,並結合mysql的文件https://dev.mysql.com/doc/refman/5.7/en/preface.html 來解決。