去掉from dual,也可以不去掉,因为orafce插件提供了dual表
序列改造: 改成 nextval(‘seq’)
强制类型转换 此处以numberic为例,字符后面加上 ::numberic,当然也可以创建自定义类型转换函数,以最常见的varchar转numberic为例,用dba账号执行以下语句即可,create cast (varchar as numeric) with inout as implicit,关于自定义类型转换的内容这里不做展开介绍,可自行百度。
Nvl函数换成coalesce,也可以自己再数据库创建一个nvl函数,实现原有的nvl函数功能,虽然orafce提供了nvl函数,但是并没有涵盖所有类型,所以还是需要自己改一下。
子查询必须有别名
Update的set子句中不能出现别名
Sysdate用now()代替,sysdate-1改成now()-interval ‘1 D’,更多关于日期计算方面的内容,可自行百度。
关于递归查询,普通的递归查询
with recursive tmp (staff_id, up_staff_id ) as (
select a.staff_id,a.up_staff_id
from staff a
where a.staff_id = 9527
union all select c.staff_id,c.up_staff_id
from staff c
join tmp t1 on c.staff_id = t1.up_staff_id
) select staff_id from tmp;
递归中如果存在死循环,一种比较好的思路:
with recursive tmp (staff_id, up_staff_id,visited ) as (
select a.staff_id,a.up_staff_id,array[a.staff_id] as visited
from staff a
where a.staff_id = 9527
union all select c.staff_id,c.up_staff_id,||c.staff_id
from staff c
join tmp t1 on c.staff_id = t1.up_staff_id
where c.staff_id <> all()
) select staff_id from tmp;
加入一个遍历列表,如果存在再遍历列表里就不再查询。
查询结果如果是map ,查询结果加上用双引号引起来的别名,这是因为pg返回的结果集key值全部为小写,与oracle全部为大写刚好相反。如果项目里大部分都是返回map,且都没使用双引号引起别名,且项目用的是mybatis,可以使用mybatis的对象加工工厂,把所有map返回值的key值都转换成大写,对象加工工厂objectWrapperFactory可自行百度。
字符串类型可以使用=‘’和 is null,但是数值类型只能用 is null,并且字符串类型的=‘’和is null并不等同。