写在前面
一个小需求在开发阶段用的是部门常用的 MySQL 数据库,开发测试完准备部署的时候,突然来了句尽量使用生产环境现有的 Oracle 数据库(锅不在我不了解清楚,因为生产环境是 Oracle 数据库这个事儿我在开发前就已经反馈过的,但我们测试环境有一大堆的 MySQL 数据库,之前一直没有部署和用过 Oracle),那得,切个数据源再改改测测吧
本来以为脚本简简单单就是增改查,应该没什么太大问题的,谁知道最终还是遇到了好几个小问题
从 MySQL 到 Oracle
这里先附一个在 MySQL 库测试完全正常的脚本(用一段最小化的脚本来代替项目中的)
insert into cust (cust_name,content,create_date) values (#{custName},#{content},sysdate())
接下来,来依次描述遇到了哪些问题并且怎么修改解决的吧。。
1. ORA-00942: 表或视图不存在
在 Oracle 库建表我用的是 navicat 进行的图形化操作,表名和字段之类的都用了小写,后来导出数据库 sql 语句一看,表名、字段都被加了双引号,就是强制只能匹配小写的那种
MyBatis 脚本里没引号的情况下,这时候会报找不到表
解决办法是重新用 SQL Plus 执行了一下建表语句,这种情况下,表名和字段应该是不再区分大小写,MyBatis 脚本就不用每个去修改加上引号了
2. Cause: java.sql.SQLException: 无效的列类型: 1111
报错的完整内容是
Cause: org.apache.ibatis.type.TypeException: Err