1. 程式人生 > >pg 與 oracle 比較

pg 與 oracle 比較

sce targe 調整 類型 out oal iso oracle ger

所謂動態引擎,就是說比如有很多張表的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、序列使用方式不一致。

pg 與 oracle 比較