前言:因为公司技术调整,数据库需要从oracle替换为PostgreSQL,替换后很多地方需要对应调整,在此记录方便自己和大家避坑。
- 数据类型
对比项 | Oracle | PostgreSQL |
---|---|---|
大文本 | clob | text |
数字 | NUMBER | NUMERIC |
可变长字符 | VARCHAR2 | VARCHAR |
- 函数
对比项 | Oracle | PostgreSQL |
---|---|---|
行号 | rownum | row_number() over(order by …) as rownum |
null时赋值 | nvl() | coalesce() |
转换为时间类型 | to_date() | to_timestamp() |
字符串分隔 | split() | regexp_split_to_table() |
三元表达式 | decode() | case when … then … when … then …else …end |
树形查询 | start with … priority … | WITH RECURSIVE a AS ( select xx,1 as level from table1 where id = ‘123’ union all select d.xx,a.level +1 from table1 d join a on d.pid = a.id) select * from a |
- 存储过程
对比项 | Oracle | PostgreSQL |
---|---|---|
当前时间 | SYSDATE | LOCALTIMESTAMP or CURRENT_TIMESTAMP |
递增序列并返回新值 | seq_xxx.nextval | nextval(‘seq_xxx’) |
存储过程调用存储过程 | proc_xxx(…) | call proc_xxx(…) |
退出游标循环 | EXIT WHEN v_cursor%notfound; | EXIT WHEN not found; |
更多: