最近公司一個項目需要將數據庫進行一次遷移
mysql存儲過程格式
DELIMITER $$
CREATE PROCEDURE `pkg_ypgl
prm_ypbm VARCHAR (
OUT prm_AppCode VARCHAR (
OUT prm_ErrorMsg VARCHAR (
)
BEGIN
/*變量定義*/
DECLARE n_count DECIMAL (
DECLARE done INT(
/*設置游標結束標志*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=
SET done=
/*定義一個區塊lavel_error
label_error : BEGIN
/*定義游標*/
DECLARE cur_bdjl CURSOR FOR
SELECT ……
/*打開游標*/
OPEN cur_bdjl ;
REPEAT
FETCH cur_bdjl INTO v_aaz
IF NOT done THEN
……
END IF;
/*結束循環
UNTIL done
END REPEAT ;
CLOSE cur_bdjl ;
SET prm_AppCode =
SET prm_ErrorMsg =
END;
END$$
DELIMITER ;
數據類型
Oracle:varchar
Oracle:number() Mysql:decimal()
Oracle:date Mysql:datetime
定義變量
Mysql需要在每句前面加DECLARE
給變量賦值
Oracle:v_string :=
異常處理
Oracle:EXCEPTION WHEN OTHERS THEN…
Mysql: DECLARE { EXIT | CONTINUE } HANDLERFOR { error
SQLWARNING 代表所有以
NOT FOUND 代表所有以
SQLEXCEPTION 代表除了SQLWARNING和NOT FOUND 的所有錯誤代碼
eg
注
跳轉
Oracle: GOTO label_error;
……
《label_error 》
Mysql:初始化錯誤代碼prm_AppCode為
游標
Mysql只有靜態游標
定義游標的語句為DECLAREcur_bdjl CURSOR FOR ……
Mysql不支持rec_curname
Mysql裡有三種循環方式
(
WHILE expression DO
statements
END WHILE;
(
LOOP
statements
END LOOP;
(
REPEAT
statements
UNTIL expression
END REPEAT;
序列
Mysql中沒有序列
建表語句
CREATE TABLE `seq` (
`name` varchar(
`val` bigint(
`increment` int(
`min` bigint(
`max` bigint(
`cycle` char(
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf
函數如下(自己寫的
DELIMITER $$
DROP FUNCTION IF EXISTS `seq`$$
CREATE FUNCTION `seq`(seq_name VARCHAR(
BEGIN
DECLARE v_value BIGINT(
DECLARE v_CYCLE CHAR;
DECLARE v_MIN BIGINT(
DECLARE v_MAX BIGINT(
SELECT a
IFv_CYCLE =
UPDATE seq
SET val = v_MIN
WHERE NAME = seq_name;
ELSE
UPDATE seq
SET val = val + increment
WHERE NAME = seq_name;
END IF;
SELECT val INTO v_value FROM seqWHERE NAME = seq_name;
RETURN v_value;
END$$
DELIMITER ;
更新
Oracle: UPDATE TABLE T SET (A
Mysql: UPDATE TABLE T
GROUP BY:
mysql的group by 語句可以select 沒有被分組的字段
select id
這個取出的id
調用
Mysql: call procedure_name(所有參數)
跳出循環
Oracle: EXIT;
Mysql: 將循環的內容定義為一個區塊label_loop
注釋
表的注釋
在oracle中執行如下語句
select
將得到的結果放到mysql中執行即可添加表名的注釋
表的字段注釋
在oracle中執行如下語句
select distinct(data_type) FROM all_tab_columns where owner=
將查詢出的本次轉換涉及到的數據類型用decode函數轉換為Mysql中對應函數(參數)的形式
在oracle中執行如下語句
select
from user_col_comments a
where ments is not null
and a
and lumn_name = lumn_name
and b
將得到的結果放到mysql中執行即可添加表字段的注釋
函數
功能 oracle mysql 備注 eg
連接字符串 || concat()
將其他格式轉換為字符串 concat(x
截取字符串 substr() substring() substr(
string轉換為date to_date() str_to_date(str
獲取當前日期 sysdate now()
一般用now()
current_date表示當前的年月日
取出日期的指定部分 date_format(date
%c:月
%d:日
%H:小時
%i:分鐘
%s:秒 date_format(now()
增加一天 sysdate+
類型轉換 TO_CHAR
TO_DATE
TO_NUMBER cast(xxx as type) type:二進制 : BINARY
字符型
日期 : DATE
時間
日期時間型 : DATETIME
浮點數 : DECIMAL
整數 : SIGNED
無符號整數 : UNSIGNED to_char(
精度轉換 to_number(x
替換空值 NVL( string
decode() decode (expression
From:http://tw.wingwit.com/Article/program/Oracle/201311/17055.html