mysql迁移到oracle以及mysql与oracle的对比
本文主要记录java开发中,由于项目需要,数据库从mysql迁移到oracle的过程,mysql与oracle数据库的对比,以及迁移过程中的一些常见报错
mysql与oracle的常见语法区别
1、日期操作
日期转化为字符串格式: mysql: date_format() oracle: to_char() 字符串转化为日期格式:
mysql: str_to_date() oracle: to_date()
2、分页
mysql中使用limit关键字:limit oracle中使用rownum关键字
具体对比:https://blog.csdn.net/crazylzxlzx/article/details/53698366
3、非空判断
mysql中使用IFNULL()函数 例:IFNULL(A,B) 如果A不为空则为A,否则为B
IFNULL(A,B,C) 如果A不为空则为B,否则为C oracle中使用NVL函数 mysql中使用IFNULL()函数 例:IFNULL(A,B) 如果A不为空则为A,否则为B
IFNULL(A,B,C) 如果A不为空则为B,否则为C
4、GROUP_BY关键字
mysql中,select可以查询任何字段 oracle中,select只能查询group_by分组的内容
5、concat函数
concat用来拼接字符串,在mysql中可以拼接任意数量的字符串,在oracle中只能拼接两个字符串,
两个以上的字符串用"||"来拼接
6、关键字
oracle中的resource等关键字需要加双引号
7、mysql中无find_in_set()函数
关于mysql中的find_in_set函数详解:https://www.cnblogs.com/xiaoxi/p/5889486.html
mysql迁移到oracle中的报错汇总
1、; uncategorized SQLException for SQL []; SQL state [99999]; error
code [17004]; 无效的列类型: 1111; nested exception is java.sql.SQLException:
无效的列类型: 1111 解决方法:给参数设置jdbcType的类型 2、Cause:
2、java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
解决方法:参数值和给定的参数类型不匹配,例如recdate,uploaddate 3、Error querying database.
3、Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
解决方法:可能是某些字段上有单引号之类的,关键字resource未加引号之类的 4、Cause:
4、java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 关键字
解决方法;from旁边的字段有问题 5、Cause: java.sql.SQLSyntaxErrorException:
5、ORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB
存在clob类型的字段,需要先转化成String再和String类型比较(to_char()转化)
6、列说明无效
可能是resource之类的关键字未加双引号