oracle迁移mysql 遇到的一些坑

背景

疫情期间,有一个老项目要从oracle迁移到MySQL, 其中碰到了一些坑,在此做个记录和大家分享一下

sequence 变 自增id

老项目中oracle主键id都是使用sequence,在mysql中自然得使用自增主键,这块主要朋友的问题是,在老项目中使用的dao层框架是springJdbc,再插入数据库中,有时需要返回插入的主键ID,oracle数据库一般都是,先查询nextval().再执行插入数据,在mysql中则不行,在springJdbc中使用KeyHolder,可以返回自增id。

oralce返回主键id代码

id = jdbcTemplate.queryForObject("SELECT SEQ_TABLE.NEXTVAL FROM DUAL",Long.class);

mysql返回主键ID代码
springjdbc通过keyHolder返回数据id

	KeyHolder keyHolder = new GeneratedKeyHolder();
			
		
				final String sql = "INSERT INTO TTABLEFO(PROVINCECODE,FILESEQ,VENDORCODE,FILEVERSION," +
						"FILELENGTH,FILETIME,KEYINDEX,EXTENSION1,EXTENSION2,CREATE_TIME) VALUES(?,?,?,?,?,?,?,?,?,now())";
				Object [] args = { file.getPROVINCECODE(), file.getFILESEQ(), file.getVENDORCODE(),file.getFILEVERSION(),
		flag = jdbcTemplate.update(new PreparedStatementCreator() {
					
					@Override
					public PreparedStatement createPreparedStatement(Connection conn)
							throws SQLException {
						PreparedStatement prepareStatement = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
						prepareStatement.setString(1, file.getPROVINCECODE());
						prepareStatement.setLong(2, file.getFILESEQ());
						prepareStatement.setString(3, file.getVENDORCODE());

					
						return prepareStatement;
					}
				},keyHolder);
	Long id = keyHolder.getKey().intValue();

涉及到时间函数的改造

oralce 涉及到时间一般都都使用sysdate,mysql中一般使用sysdate()/now()

oracle代码

insert into t_bis_agentit(staffid,verifytime,inserttime) values (?,?,sysdate)

mysql代码

now()

递归关键字connect by

oracle支持递归查询,而mysql根本没有类似的关键字,所以在查询中只能通过代码去实现递归查询

oracle代码


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值