postgresql同oracle语法差异

很多内容是网上查的资料,我只是整理下,有遗漏的地方,欢迎补充

首先用工具(Ora2pg)自动转换

由于这个项目后台程序量很大,存储过程+触发器大约有15万行代码。

用这个工具可以将一些oracle与pgsql的语法差异自动处理下,但不是全部,剩下的需要手工修改。

ORACLE语法→ PostgreSQL语法

1、VARCHAR2 → varchar

2、DATE → timestamp

3、SYSDATE → localtimestamp

4、Oracle中''和NULL是相同的,但pgsql是不同的,所以需要将''修改成NULL

5、字符串连接符||

Oracle:'a'||null 结果是'a'

pgsql: 'a'||null 结果是null

所以用concat()函数替代

6、trunc(时间) → date_trunc()

7、to_char, to_number, to_date pgsql都需要指定格式

8、DECODE → case

9、NVL → coalesce()

10、外连接(+) → left(right) join

11、GOTO语句→ pgsql不支持

12、pgsql不支持procedure和package,都需要改写成function

当package有全局变量的情况修改起来比较麻烦,我们是用临时表传递的。

13、cursor的属性

%FOUND → found

%NOTFOUND → not found

%ISOPEN → pgsql不支持

%ROWCOUNT → pgsql不支持

另外关于cursor的其他差异,参照这个帖子

http://m.sodocs.net/doc/a63449cc3186bceb18e8bb09.html /client/post_show.php?zt_auto_bh=56751

14、COMMIT,ROLLBACK;SAVEPOINT → pgsql不支持

15、Oracle的系统包,例如DBMS_OUTPUT,DBMS_SQL,UTIL_FILE,UTIL_MAIL → pgsql不支持

16、异常处理方法不同

17、trigger的语法不同

18、日期的加减计算语法不同。

1、oracle没有继承和重载特性,pgsql支持继承和函数重载;

2、oracle中的空字符串等同于null,pgsql中是分开处理的;

3、oracle不支持boolean类型,可以用integer型代替

4、pgsql中:: 为类型转换,oracle中不具有;

5、oracle中可以使用rownum分页,pgsql使用limit;

6、pgsql中,查询语句from子句中,表名后可以加as 别名,oracle中表名后不允许出现as ;

7、pgsql子查询要求严格,必须具有别名才可以;

8、序列使用方式不一致。

相关推荐
相关主题
热门推荐