记一次达梦数据库数据迁移至oracle数据库的过程。
一个前后端分离的项目,前端用的vue,后端用的springboot,数据库使用的是国产数据库达梦数据库dm8。现在要切换成oracle,分三步。
一、数据迁移
使用达梦自带的dm数据迁移工具,步骤如下:
1、新建工程
2、打开工程,迁移——点右键新建迁移
3、双击 新建的迁移项目,点下一步,选择DM==>oracle ,点击下一步
4、输入oracle的数据库信息。
5、点击下一步,选择要迁移的数据库,如果迁移到数据库的表和字段大小写同时存在,可以把右侧保持对象名大小写取消勾选,这样迁移oracle会都转为大写,oracle 表名 、字段名 默认不区分大小写,除非建表语句中字段名带双引号 如CREATE TABLE “TableName”(“ID” number)如果保持对象名大小写这一栏是勾上的,迁移工具在迁移的时候会对表名,字段名加上双引号,可能在后面程序运行的时候会报找不到表或者字段的错误,点击一步。
二、修改配置文件
三、数据sql语法对比
数据库语法对比 |
达梦 |
oracle |
判断空 |
ifnull(params,”) |
nvl(perms, ” ) |
当前日期 |
sysdate() |
sysdate |
日期格式化 |
date _formate(dateString,pattern) |
to _ date (dateString,pattern) |
字符串拼接 |
concat ( ‘%’ , #{参数} , ‘%’ ) 三个参数 |
concat( ‘%’ || #{参数} , ‘%’ ) 两个参数 |
获取插入id |
<insert id= “insertPost” parameterType= “SysPost” useGeneratedKeys= “true” keyProperty= “postId” > |
<insert id=”insertPost” parameterType=”SysPost” > <selectKey resultType=”java.lang.Long” order=”AFTER” keyProperty=”postId”> SELECT SYS_POST_SEQ.CURRVAL as id from DUAL </selectKey> |
分页 |
limit (n-1)*size, size |
select * from ( select t.*,rownum rn from CLEAR_01 t) nn where nn.rn> 9 and nn.rn< 101 ; |
主键 |
达梦可设置自增主键,插入时可不插主键 |
无自增主键,需要新建自增序列,插入时使用序列SEQ_ID.NEXTVAL |
批量插入 |
insert into 表名(字段名)values (字段值),···,(字段值) <insert id=” batch “> insert into table(table_id, table_name) values <foreach item=” item ” index=” index ” collection=” list ” separator=” , “> (#{item.tableId},#{item.tableName}) </foreach> </insert> |
不支持直接插入多行,可循环插入或使用 union <insert id=”batch”> begin <foreach item=” item ” index=” index ” collection=” list “> insert into table (table_id, table_name) values #{item.roleId},#{item.menuId}; </foreach> end </insert> 或 <insert id=”batch”> insert into table(table_id, table_name) <foreach item=” item ” index=” index ” collection=” list ” separator=” union “> select #{item.roleId},#{item.menuId} from dual </foreach> </insert> |
大小写 |
||
日期 |
date显示时分秒 |
插入date类型,数据存为00:00:00,可用timestamp代替 xml中类型改为jdbcType=TIMESTAMP |
char |
插入后无空格 |
插入后有空格,插入前可用NVARCHAR2代替 |
版权声明:本文为unionall原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。