没有合适的资源?快使用搜索试试~ 我知道了~
Oracle到mysql转换的问题总结.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 165 浏览量
2021-11-10
21:53:29
上传
评论
收藏 352KB DOC 举报
温馨提示
试读
44页
Oracle到mysql转换的问题总结.doc
资源推荐
资源详情
资源评论
Oracle 到 mysql 转
换的问题总结
作者
日期
【精品文档】
Oracle 到 mysql 转换的问题总结
常用字段类型区别
oracle mysql
()
() ()
个别语句写法区别
1.oracle 里只可以用单引号包起字符串,mysql 里可以用双引号和单引号。
2.mysql 在 select * from () ....,from 后面是一个结果集时,括号后面必须
加上别名。
3.mysql 在 delete 数据时不能给表加别名,如:delete from table1 T
where....,会报错,但是可以这样写:delete T from table1 T where....。
4.Mysql 不支持在同一个表中先查这个表在更新这个表,举个例子说明一下,
insert into table1 values(字段 1,(select 字段 2 from table1
where...)),
但是可以在后面那个 table1 加上别名就没有问题了。
insert into table1 values(字段 1,(select T.字段 2 from table1 T
where...))
5.MYSQL 有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数
据值。ORACLE 没有自动增长的数据类型,需要建立一个自动增长的序列号,
插入记录时要把序列号的下一个值赋于此字段。也可以自定义函数实现 oracle
的 nextval。
6.翻页的 sql 语句处理,MYSQL 处理翻页的 SQL 语句比较简单,用 LIMIT 开
始位置, 记录个数,例如:select * from table limit m,n,意思是从 m+1 开
始取 n 条。
【精品文档】
【精品文档】
常见的函数替换
说明
!
"#$%
$$$& $ $#!
注意时间格式的对应
!
#$%$
$$& $ $#!
注意时间格式
!
#$%$
$$'#!
注意时间格式
!、! 字段名类型! 类型转换
(
!
日期增加 天
!)*'+,
-./0.%!1
!
!
日期增加 个月
!)*'+,
-./2*'&!1
""! 日期相减获取天数
3 中 ()函数,可以用 4 进行替换
例子:
2:!"1
:
45
465
"
73 的函数 ,28*9:+,!2-+,;.,')')2*:%2,0+,:%
!,根据 分组,在分组内根据 排序,改函数计算的值就表示每组内
部排序后的顺序编号。
没有这个函数,可以用 的用户变量来实现
例子:
2:4!<!"
:"
"=<<5=> 5=>(=> 5!=<< 5"
!&
【精品文档】
【精品文档】
这里用到 的用户变量。
3 的行号 ,28*9, 没有这个行号,也需要用用户变量来实现。
例子:
2:?"445
?"(SELECT (@rowNum := 0)) HH where
(@rowNum := @rowNum + 1) - col1=0
5.Oracle 中的 substr (hello,a,b) mysql 中是
substring(hello,a,b) oracle 的 a=0 和 a=1 是一样的,都是从第一
个开始。Mysql 是从 0 开始。
6.Oracle 的 nvl()对应 mysql 的 ifnull()。
7.Oracle 中的 WMSYS.WM_CONCAT(),列转行函数,以逗号隔开,mysql
可以用 GROUP_CONCAT()进行替换。
8.Oracle 的||可以用 mysql 的+替代,但是 mysql 在往某列加上字符时应该
用 concat,
例如给表中 name 字段加上 x:update table1 set
name=concat(x,name)。
1.1移植过程中重点问题
1.1.1数据类型差异
ORACLE 数据库和 MYSQL 数据库在数据类型方面差异比较大,而且数据
类型也是一个数据库存储数据的基础,所以找到数据类型之间的对应是整个系
统进行移植的基础。以下给出了 ORACLEàMYSQL 数据类型的对应关系。
数值类型:
NUMBERàDECIMAL,精度刻度都不变
注:如果是序列用 BIGINT
字符串类型:
VARCHAR2àVARCHAR 长度不变。
LONGàLONGTEXT
【精品文档】
【精品文档】
这里有可能遇到的问题是超过主键 key 长度的问题,根据实际情况适当修
改,如果是 TEXT 类型也需要指名长度,否则建立 key 会报错
日期类型:
DATEàDATETIME
TIMESTAMP(N)àTIMESTAMP
1.1.2SQL 语法差异
SEQUENCE:
MYSQL 没有 ORACLE 中的 SEQUENCE 对象,我们在迁移的时候需要特
别注意,一般 SEQUENCE 有两种用途:
1、@作为表中自增字段的序列号。
2、@程序中获得自动编号。
MYSQL 数据类型中存在@AUTO_INCREMENT 为自增数据类型。我们可以
利用该数据类型变通一下来满足我们现有系统中的 SEQUENCE 功能。
1、@对于 ORACLE 中 SEQUENCE 作为表的自增列一般是通过与触发器绑
定实现的,在 MYSQL 中我们可以直接利用 MYSQL 的 AUTO_INCREMENT 类
型来实现。
2、@ORACLE 开发的应用程序中直接 SELECTSEQUENCT 来获得自动编
号,对于这个功能我们也可以利用 MYSQL 的 AUTO_INCREMENT 类型来实现。
首先介绍一个函数,我们可以利用如下函数查询最后一个序列号的值:
mysql>SELECTLAST_INSERT_ID();
+------------------+
|LAST_INSERT_ID()|
+------------------+
【精品文档】
剩余43页未读,继续阅读
资源评论
love1987421
- 粉丝: 0
- 资源: 7万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功