mysql 迁移到oracle_系统从MySQL迁移至ORACLE实现方案

本文介绍了如何将系统从MySQL迁移到Oracle,包括使用Navicat Premium进行数据结构同步,调整数据库驱动和数据源配置,以及在Java后台处理自动递增主键和日期类型的差异。此外,还列举了在Oracle中处理模糊查询、分页查询时遇到的问题及解决方案。
摘要由CSDN通过智能技术生成

bc3f9276acf88283a0569b9b9ef9ee92.png

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

首先,数据库脚本迁移

1,数据结构同步

打开Navicat Premium,单击菜单[工具]-[数据传输],然后在弹出的对话框中选择相应的源库和目标库。

p>%0A<p><pre%20class%20=创建SEQUENCE SEQ_ACCOUNT_INFO,以1个最小值1开始,以1个NOMAXVALUE NOCACHE开始;

第二,系统配置调整

1.将Oracle数据库驱动程序添加到pom文件中

\ lt;依赖项

\ lt; groupId com.oracle \ lt;/groupId

\ lt; artifactId ojdbc14 \ lt;/artifactId \\ u>

\ lt;版本\ 10.2.0.4.0 \ lt;/版本gt;

\ lt;范围系统\ lt;/作用域

\ lt; systemPath $ {project_basedir}/lib/ojdbc14-10.2.0.4.0.jar\\u0026lt;/systemPath\\u0026gt;

\ lt;/依存关系

2.调整数据源

Jdbc.properties配置调整

db.driverClassName = oracle.jdbc.driver.OracleDriver

db.url = jdbc:oracle:薄:@ 10.10.1.107:1521:orcl

db.username = root

db.password =根

db.mapper =类路径:mybatis/oracle/* Mapper.xml

validationQuery =从DUAL中选择" x"

三,Java背景调整

1.在Mapper文件中,将自动递增的主键调整为Oracle序列模式

原始的MySQL方法如下:

\ lt; selectKey resultType =" java.lang.Long" keyProperty =" id" order ="之前" \ gt;

选择LAST_INSERT_ID()

\ lt;/selectKey

Oracle排序方法如下:

\ lt; selectKey resultType =" java.lang.Long" keyProperty =" id" order ="之前" \ gt;

从双重选择SEQ_ACCOUNT_INFO.NEXTVAL

\ lt;/selectKey

2.日期(时间)类型调整

日期格式

MySQL数据库使用DATE_FORMAT(日期,格式)函数将日期格式化为字符串,格式可用的标识符为:%Y(年),%m(月),%H(小时),%i (分钟),%S(秒)等。常用格式为”%Y-%m-%d”,”%H:%i:%S”,”%Y%m”等。

Oracle数据库使用TO_CHAR(日期,格式)函数格式化日期,例如格式化当前日期:TO_CHAR(SYSDATE,” yyyy-mm-dd HH:mi:ss”)。

另外,MySQL是弱类型的数据类型。将字符串转换为日期时(对于其他类型也是如此),只要它符合日期格式,就不需要类型转换,但是Oracle必须执行类型转换。 Oracle提供了TO_DATE(date_str,” yyyy-mm-dd hh24:mi:ss”)函数,用于将字符串转换为日期类型。

获取当前日期的函数

MySQL常用的获取当前日期(时间)的函数有:NOW(),SYSDATE(),CURDATE(),CURTIME()等。在Oracle中使用SYSDATE。

计算时差

MySQL数据库使用TIMESTAMPDIFF(间隔,datetime_expr1,datetime_expr2)函数来计算时间差,其中间隔可以是YEAR(年),QUARTER(季度),MONTH(月),WEEK(周),DAY(天) ),HOUR(小时),MINUTE(分钟),SECOND(秒),FRAC_SECOND(毫秒),例如计算到2017年5月1日为止的天数:

SELECT TIMESTAMPDIFF(日期," 2017-05-01",现在());

? MySQL还具有许多计算时间差的函数,例如DATEDIFF(date1,date2)等等。

? Oracle数据库通过减去两个日期直接计算时差,例如计算到2017年5月1日为止的天数:

?计算自2017年5月1日以来的小时数:

SELECT FLOOR(TO_NUMBER(SYSDATE-TO_DATE(" 2017-5-1 00:00:00"," yyyy-mm-dd hh24:mi:ss"))* 24)从双;

3.模糊查询

MySQL使用

concat("%",#{keywords},"%")

在Oracle中使用

"%" || #{keywords} || "%"

四个常见问题

1.删除重复的列以防止在Oracle分页查询期间出错:ORA-00918:该列未明确定义。

2.ORA-00942:表或视图中没有错误,可能是数据库表的名称错误,可能没有权限或帐户不存在,等等。

3.MySQL字符串支持单引号和双引号,但是Oracle仅支持单引号。

4.在Oracle中执行组统计时,必须将所有未聚合的列放在group by子句中。如果涉及排序,则排序的列也必须位于group by子句中。在MySQL 5.7之前,对分组统计信息没有强制性约束。 5.7之后,Oracle和Oracle遵循相同的标准。

5.您不能在Oracle的GROUP BY子句中使用列别名。

6.在Oracle中不能将单引号添加到别名中。

7.MySQL批处理插入和更新必须转换为以begin end开头的Oracle批处理插入和更新

开始

声明

;结束;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值