mysql oracle as_oracle到mysql迁移对应关系1

oracle到mysql迁移对应关系1

(2018-09-27 20:57:06)

标签:

mysql

oracle迁移mysql

如下是最近做一个oracle到mysql的迁移总结的部分迁移对照关系,记录下:

1. with as 公共表达式

Oracle允许在一个sql语句中通过with as

包含一个查询语句,将这个语句定义为一个临时表名,并在SQL语句中使用这个临时表名。

对应的mysql的实现方式为,将with as的功能表达式替换为一个子查询。

2. encode函数

oracle的encode函数根据参数的不同表达的意思也不一样。

如果是4个参数,例如encode(p1, p2, p3, p4) 需要替换为mysql的 if (p1 = p2, p3,

p4),如果p2是NULL 需要写成 if(p1 is NULL, p3, p4);

如果多余4个参数,需要改写为case when,并且根据参数的个数添加或不添加else,例如

encode(p1, p2, p3, p4, p5),需要替换为case when p1=p2 then p3 when p1=p4

then p5 end;

encode(p1, p2, p3, p4, p5, p6), 需要替换为case when p1=p2 then p3 when

p1=p4 then p5 else p6 end;

同样如果是NULL的话,需要改为 p1 is NULL。

3. nvl 函数

直接替换为ifnull

4. 子查询别名

oracle里如果 from 后面的子查询可能没有别名,例如select * from 子查询。

但在mysql里只要是子查询就必须有别名,所以需要补上别名。

5. to_char

如果to_char的是时间字段,to_char的第2个参数是一个时间格式字符串的话,可以调整为mysql的date_format,同时把时间格式字符串“yyyy-mm-dd

hh24:mi:ss” 替换为“%Y-%m-%d %H:%i:%S”,“yyyy/mm/dd”替换为“%Y-%m-%d“。

如果to_char只跟一个参数,那么需要使用cast, 例如 to_char(c1),改写为 cast(c1 as

char(64))。

6. to_number

to_number(c1) 改写为 cast(c1 as

SIGNED INTEGER)

7. to_date

替换为str_to_date

8. ||

Oracle里的||是字符串拼接,可以将其替换为mysql的concat 和ifnull。

c1||c2 改写为 concat(ifnull(c1,""), ifnull(c2,""))

9. sys_guid

需要替换为REPLACE(UUID(),'-','')

10. sysdate

oracle可以直接写sysdate函数名,而不用加()表示函数调用。

mysql必须加上(),所以调整为 sysdate()

11. rownum <= NUM 或 rownum < NUM

rownum <= NUM 替换为 limit num

rownum < NUM 替换为 limit num-1 (num-1需要计算出具体的数字,mysql的limit不支持表达式计算)

12. (+) for left 和right join

oracle里,允许使用(+)来表示left join或 right join。

例如

select .. from t1, t2 where t1.c1=t2.c2(+) 等价于mysql的 select .. from

t1 left join t2 on t1.c1=t2.c2;

select .. from t1, t2 where t1.c1(+)=t2.c2 等价于mysql的 select .. from

t1 right join t2 on t1.c1=t2.c2;

注意oracle中2张表可以出现多个(+),他们要同时出现在left join的on条件中,例如:

select .. from t1, t2 where t1.c1=t2.c2(+) and t1.c11=t2.c22(+)

等价于mysql的 select .. from t1 left join t2 on t1.c1=t2.c2 and

t1.c11=t2.c22;

13. wmsys.wm_concat

替换为mysql的 group_concat

14. cast中的oracle类型

例如cast(c1 as varchar2(10)) 需要替换为 cast(c1 as char(10))

15. ADD_MONTHS

ADD_MONTHS(c1, 5) 替换为 ADDDATE(c1, INTERVAL 5 MONTH)

16. insert/delete 语句的表有别名

oracle允许在insert/delete语句中给被修改表加别名,例如 delete from t1 t where

...

在mysql中需要把别名去掉

17. rawtohex

替换为mysql的hex

18. 简单的connect by生成数据表

select level lv from dual connect by level <= 4

替换为

select 1 union select 2 union select 3 union select 4;

转载请注明转自高孝鑫的博客!

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值