1、使用Navicat Preminm工具将mysql表结构与数据转为oracle表格式
1.1 工具(tools)->数据传输->勾选源数据库、目标数据库->下一步->可取消勾选对应的表->开始
1.2 查看表名和字段名大小写(应该都是小写、跟mysql命名一样),使用语句将表名和字段名都改为大写
begin
for t in (select table_name tn from user_tables where table_name <> upper(table_name)) loop
begin
for c in (select column_name cn from user_tab_columns where table_name=t.tn) loop
begin
execute immediate 'alter table "'||t.tn||'" rename column "'||c.cn||'" to '||c.cn;
exception
when others then
dbms_output.put_line(t.tn||'.'||c.cn||'已经存在');
end;
end loop;
execute immediate 'alter table "'||t.tn||'" rename to '||t.tn;
exception
when others then
dbms_output.put_line(t.tn||'已存在');
end;
end loop;
end;
1.3 将库导出sql语句,打开将对应的N开头的字段类型都改为非N开头对应的字段类型,重新导入
表空间、表名大小写敏感,导入时注意,全局替换
2、Java代码改动
2.1 方言、数据源、驱动配置
2.2 代码改动:
1> oracle表名后不能用AS起别名,可以直接表名跟别名,字段可以使用AS起别名
2> to_days改为(格式根据情况而定):
TO_CHAR(sysdate,'MM/DD/YYYY')
TO_DATE(sysdate, 'yyyy-mm-dd')
TO_DATE(TO_CHAR(sysdate, 'yyyy-mm-dd'), 'yyyy-mm-dd')
3> Limit改为
SELECT * from (原sql) where rownum < 11(非分页,查前多少个记录)
4>若字段为Clob类型,查询出来的为List<Map>集合的则需要对结果进行转型
try {
for(Map<String,Object> data : list) {
for (String key : data.keySet()) {
if (data.get(key) instanceof Clob){
Clob clob = (Clob) data.get(key);
data.put(key, clob.getSubString((long)1,(int)clob.length()));
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
5> ifnull 改为 nvl
6> 判断集合中是否包含某个元素
FIND_IN_SET('1',type) > 0 改为 instr(','||type||',',',1,') > 0
7> CONCAT拼接字符串的换成||连接
8> UUID() 换成 sys_guid()
9> IF 函数 换成 DECODE 函数
IF(条件,结果值)
DECODE(VALUE, IF1, THEN1, IF2, THEN2, IF3, THEN3, ......, OTHER);
表示如果VALUE等于IF1时,DECODE函数的结果返回THEN1,......,如果不等于任何一个if值,则返回OTHER
10> 返回前端页面的类型:
a) 若为List<Map<String,Object>>类型则前端使用字段要改为大写
b) 若为VO实体类型则不需要改动,仍为之前的驼峰式