所谓动态引擎,就是说比如有很多张表的Join,原始的做法是一开始就生成好这个执行计划,随后执行,但实际上很多表Join的时候,你一开始生成的那个执行计划很有可能是不对的。

那么动态执行计划就是指它可以边执行边帮助搜集最准确的执行信息,从而调整后面的执行计划

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://bbs.pgsqldb.com/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、2、oracle中的空字符串等同于null,pgsql中是分开处理的;

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

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

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

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

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

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