一、从Oracle移植到MySQL主要有六个方面的内容需要移植,一是表Table,包括表结构和数据,二是触发器Trigger,三是存储过程Procedure,函数function和包Package,四是任务Job,五是用户等其他方面的移植,六是具体应用程序通过SQL语句访问时的细节差异克服。笔者用来移植测试的数据库是:Oracle 9i ,MySQL 6.0,Windows 2000环境。
二、经过映射转换,比如number会转换为double,date转换为timestamp等,请小心处理日期字段的默认值等,表的主键,表的索引(Oracle的位图索引会被转成BTree索引,另外表和字段的注释会丢失)等信息。需要特别注意的是,Oracle的自增字段的处理。提供字段自增属性。
三、触发器的移植首先,MySQL在6.0以后才支持触发器!触发器的移植没有现成工具,因为两者之间的语法差异较大,您只能通过手工对照着原来的逻辑一个一个添加。
四、存储过程,函数和程序包的移植程序包是Oracle用来组织逻辑功能的一个Object,MySQL不支持,因此需要将包里的存储过程﹑函数等全部放到该数据库公有过程和函数里面。
五、Job的移植Job是Oracle的定时任务实现的方法,MySQL6中用Event实现,具体语法请参考MySQL手册。
六、用户的移植Oracle的用户管理和MySQL下有较大区别,请分别建立用户,并赋予合适的权限。
七、应用程序的移植由于语法细节上的差异,导致很多SQL语句需要改写。笔者记下了所有移植过程中碰到的SQL语句细节差异,列出来以供参考:
1)Oracle的to_char函数不能再使用,换用如CONCAT(14.3)的形式,为了提高应用程序兼容性,建议手工写一个
2)Oracle的to_date函数不能再使用,建议手工写一个添加到MySQL数据库
eg:
to_char(sysdate,'yyyy-mm-dd')-->date_format(sysdate(),'%Y-%m-%d');
to_date(sysdate,'yyyy-mm-dd')-->STR_TO_DATE(sysdate(),'%Y-%m-%d');
to_char(add_months(to_date ('20000101','yyyymmdd'),1),'yyyy-mm-dd')-->date_add('2000-01-01',interval 1 month);
3)Oracle的decode函数不能再使用,换用SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END 的形式
4)nvl这样的一些专用函数,MySQL是没有的,可以把select nvl(to_char(num),'nothing') from t_equipment转换成select case num when num then num else 'nothing' end from t_equipment
5)instr之类的函数,函数名相同,但参数个数不同
6)Oracle的sysdate要写成sysdate()的形式
7)包的形式已经取消,所以原来以包的方式调用的过程如xx_pack.xxx要写成xxx()
8)带进制字符转数字Oracle风格:TO_NUMBER(strTmp,'XX') TO_NUMBER(’9’)MySQL风格:CONV(strTmp,16,10) CONV(’9’,10,10) 如果字符串前后有加减操作,会隐含转换成数字
9) 不能再有直接调用序列的形式,如果一定需要,可以模拟实现一个
10)日期直接加减的含义不同了,比如Oracle中sysdate + 1 变成了sysdate() + interval 1 day(注意如果写成sysdate() + 1 语法还是正确的,但含义是错误的)查询select sysdate() + 1 from dual 在MySQL得到比如 20080223153234(= 20080223153233 + 1)的数而在Oracle中会得到第二天当前时刻。
11) MySQL单纯的date类型只是日期不带时间,DATETIME或TIMESTAMP带有时间,用DATE_FORMAT函数可以控制显示形式
12)select 'abc' || 'd' from dual 两个数据执行的结果不同(语法都能通过),MySQL要写成select concat('abc' , 'd')的形式
13) Oracle高级功能,如带有暗示索引的select语句,MySQL是不支持的(语法可以通过)
14)有些MySQL的保留字不能直接用在SQL语句里,要加表名或别名限制,如select RIGHT FROM XX要改成select a.RIGHT FROM XX a
15) Oracle的子查询可以不起别名,但MySQL是必须的,比如下面的别名aa:select field1 from (select sysdate() as field1 from dual) as aa
16)很多系统表名都是不同的,比如,列出某个表的信息:select * from tab where TName='T_TEST'改成select table_name,table_type from information_schema.tables where table_schema = 'user' and table_name=' T_TEST '
17)MySQL下update时不能有本身的子查询update T_TEST set Flag = 0 where field1 in
(select distinct b.field1 from T_TEST b where b.flag=1)
18)Oracle下’’和null等价,而MySQL则不然select 1 from dual where '' is null在Oracle下可以取到记录,在MySQL下不能dual表的使用,substr、trim等函数的主要使用方式和Oracle类似
八、小结和建议看起来,Oracle移植到MySQL似乎挺麻烦,有没有一键完成的简单办法?呵呵,我没有找到,除非您只使用基本表,只使用基本SQL语句访问它。
分享到:
相关推荐
项目做好了,更高的要求被提出来,比如,要多数据库支持,怎么办?... 作为一个开源数据库,MySQL用无数案例证明了她的可用性,因此让我们把重点放在如何将Oracle移植到MySQL上。已经有很多的文章和专题介绍了Ora
总结来说,从MySQL到Oracle的数据迁移是一个涉及多个步骤的过程,需要正确配置和管理数据库环境,确保用户和表空间设置正确,并且使用像SQL Developer这样的工具来简化迁移。在迁移过程中遇到问题时,要逐一排查,如...
Oracle到MySQL转换器是将数据库从Oracle迁移到MySQL服务器的工具。由于直接连接到源数据库和目标数据库,该程序保证了转换过程的高性能。它不使用ODBC或任何其他中间件组件。不需要安装Oracle组件。安装包包括产品到...
1. 移植性:由于语法和功能上的差异,从Oracle移植到MySQL或反之可能会遇到挑战,尤其是在处理复杂的业务逻辑和存储过程时。 2. 兼容性:Oracle和MySQL对操作系统、硬件平台的兼容性都较好,但Oracle通常在大型企业...
本篇文章将详述从Oracle数据库到MySQL的迁移过程,主要关注关键步骤、工具选择以及可能遇到的问题。 首先,我们需要理解Oracle和MySQL之间的核心差异。Oracle是商业级的关系型数据库管理系统,以其强大的性能和高级...
近些天在做一个同步功能,需要将mysql数据库中的某两张表的数据同步到oracle,考虑到表的字段较多,一个个写肯定不行,借助工具Convert Mysql to Oracle来转换!mysql中表与数据移植到oracle的纯绿色软件
在这种情况下,"ORACLE移植到SQL SERVER上的软件"提供了一种解决方案。 该软件的主要功能是使用“SQL Server Migration Assistant”(SSMA),特别是针对Oracle的版本——SSMA for Oracle。SSMA是一种工具,它简化...
在进行MySQL到Oracle的数据迁移之前,首先需要做好一系列的准备工作。 ##### 1.1 导入机 - **安装Oracle 11g数据库**:确保安装过程中正确配置数据库的各项参数,包括数据库实例名、管理端口等。 - **安装MySQL...
MySQL的视图在某些方面可能有特定限制,比如SELECT语句的复杂性,这可能影响到从Oracle移植过来的视图的兼容性。在移植过程中,需要检查并调整视图定义以适应MySQL的语法和限制。 6. **移植策略**: - 数据转换:...
一、为什么要进行MySQL到Oracle的数据移植? 1. 功能需求:Oracle数据库提供了更丰富的功能,如高级SQL支持、分布式数据库、ACID(原子性、一致性、隔离性、持久性)事务等,适合大型企业级应用。 2. 性能优化:...
【Oracle到MySQL系统移植的关键知识点】 在软件开发中,数据库系统的迁移是一项复杂的工作,尤其是在从Oracle这样的高级数据库系统迁移到MySQL时。Oracle MySQL系统移植方案主要关注数据类型、SQL语法和特定功能的...
【Oracle到MySQL迁移】在IT行业中,数据库迁移是一项常见的任务,尤其当业务需求与现有数据库系统不匹配时。本文主要探讨了将Oracle数据库环境迁移到MySQL时遇到的问题及解决策略。 1. **大小写敏感性差异**:...
在从Oracle移植到MySQL时,可能会遇到的问题包括大小写敏感性(在Linux环境下),因为Oracle通常不区分大小写,而MySQL在某些配置下是大小写敏感的。这可能导致表名或列名的匹配问题。此外,还有数据类型、存储过程...
在Java中,Java Database Connectivity (JDBC) 是一个标准的API,它允许Java应用程序连接到各种类型的数据库,包括Oracle和MySQL。 Oracle是世界上最广泛使用的商业关系型数据库管理系统之一,由Oracle公司提供。在...
它提供了一组接口和类,使得Java应用程序能够连接到各种类型的数据库,包括关系型数据库如Oracle、MySQL和SQL Server。JDBC允许开发者编写与数据库无关的代码,提高了代码的可移植性。 Oracle 10g是Oracle公司的一...
起初,项目使用的是本地 Oracle 数据库作为数据源,但考虑到每次运行系统都需要手动启动,并且需要在本地安装数据库的情况,这种配置显然不利于系统的移植和推广。因此,决定将数据源从 Oracle 迁移到 MySQL,以提高...
用户权限的移植涉及到角色和权限的重新分配,视图的语法可能需要调整,索引类型的变化(如Oracle的位图索引),同义词在MySQL中可能需要通过别名来实现,游标和约束的语法也存在差异。 六、SQL语句的调整 由于...
先有个免费工具,但每个表只能移植5条记录(clob blob等大数据类型都能处理)。若要代码自动批量移植,请MSN联系:dy-fairy@hotmail.com
总之,Oracle到MySQL的数据移植是一项复杂的工作,涉及到多个层面的技术问题,包括但不限于数据类型映射、数据转换、数据库结构的重构以及后期的测试和维护。通过使用专业工具和遵循适当的迁移流程,可以有效地降低...