开发者社区> 问答> 正文

java ssh 项目oracle移植到postgresql:报错

原来一使用ssh开发的项目,因实际需要,要从oracle迁移到postgresql。

理想

1.postgresql中创建相关表,把数据从oracle导到postgresql中
2.复制postgresql的jdbc包到项目中
3.配置jdbc参数,及方言
4.大功告成

现实

1,2,3顺利完成
但并没有大功告成


分析

主要的错误为两类:
1. 不支持 connect by  ... start with语法
2. 不支持 a.id=b.id(+) 语法
原项目中大量使用了上述两种语句,在postgresql中要相应修改

解决

1. 递归查询
postgresql 支持两种递归查询语法,本人倾向于使用 with recursive 语法,如:

with recursive rec as (
    select p_id, id, code, name 
      from t_menu 
     where id=[start with value]
    union all
    select m.p_id, m.id, m.code, m.name
      from t_menu m, rec r
     where r.id = m.p_id /* connect by part*/
  )
select * from rec


2. 外连接

改用 left outer join [table] on a.[field]=b.[field] 语法,如:


select a.*
  from a, b
 where a.id=b.id(+)
   and a.type=?

更改为:

select a.*
  from a left outer join b on a.id=b.id
 where a.type = ?

3. 比较庆幸原项目没有使用存储过程、函数及其他oracle专有功能,如:序列、同义词、物化视图、job等,否则迁移起来更麻烦。

最后

留一个外连接的题目,看看大家能否正确的转换成postgresql语句

select a.a_id, b.b_id, c.c_id
  from a, b, c
 where a.b_id = b.b_id(+)
   and b.c_id = c.c_id(+)






展开
收起
kun坤 2020-06-06 11:22:50 650 0
1 条回答
写回答
取消 提交回答
  • left join 直接搞定######几大sql 服务器都有各自的优化语法。没办法。要么改成通用的sql######楼主说的东西, OSC顶多能有 0.1% 能看懂

    2020-06-06 11:22:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载

相关镜像