1. 数据库管理工具 Navicat Premium.exe
下载地址: Navicat | 产品
打开程序进行数据传输即可,注意:可以跨多个数据源进行传输。
2. 注意问题
数据传输完成后,所有的表基本是转换成功的,但是Oracle的存储过程、函数、视图、序列、自定义类型等不能自动转换,需要人工修改。
3. MySQL序列解决 (Hibernate环境下使用)
(1)在MySQL新建一张存储序列的表T_SEQUENCE,PK_NAME:序列名称, PK_NAME:序列值。
-- ----------------------------
-- Table structure for T_SEQUENCE
-- ----------------------------
DROP TABLE IF EXISTS `T_SEQUENCE`;
CREATE TABLE `T_SEQUENCE` (
`PK_NAME` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`PK_VALUE` bigint(255) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of T_SEQUENCE
-- ----------------------------
INSERT INTO `T_SEQUENCE` VALUES ('INT_SEQUENCE', 193183);
SET FOREIGN_KEY_CHECKS = 1;
(2)Hibernate 使用注解方式调用序列
@Id
@Column(name = "USER_ID", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "ID_GENERATOR")
@TableGenerator(name = "ID_GENERATOR", table = "T_SEQUENCE", pkColumnName = "PK_NAME",
pkColumnValue = "INT_SEQUENCE", valueColumnName = "PK_VALUE", allocationSize = 1,
initialValue = 192708)
private Integer logonEntityId;
@Column(name = "USER_ID", nullable = false)
4. SQL标准化
序号 | Oracle | MySQL |
1 | to_char(date,'yyyy-MM-dd'); | date_format(date,'%Y-%m-%d') |
2 | to_date(date,'yyyy-MM-dd'); | str_to_date(date,'%Y-%m-%d') |
3 | trunc(date) | date_format(date, '%Y-%m-%d') |
4 | select rownum | select (@rowno := @rowno +1) as rownum |
5 | nvl(expr1,expr2) | ifnull(expr1,expr2) |
6 | nvl2(expr1,expr2,expr3) | if(expr1,expr2,expr3) |
7 | decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) | case when 条件1 then 值1 when 条件2 then 值2 ...else 值3 end |