天天看點

Oracle與Sql Server差異點詳解

1、create函數或存儲過程異同點

      oracle 建立函數或存儲過程一般是 create or replace ……

      sql server 則是在建立之前加一條語句,先判斷是否已經存在,如果存在删除已有的函數或存儲過程。

函數語句:

存儲過程:

2、結構異同點(在建立存儲過程的時候,文法格式上的差異)

oracle:

sql server:

3、調用參數

4、變量命名及指派

5、if語句

或者

6、遊标的定義及使用及循環操作

oracle定義遊标:

sql server定義遊标:

oracle使用遊标:

sql server使用遊标:

oracle循環操作遊标 (超級簡潔):

sql server循環操作遊标:

7、計算時間差

8、 top n 問題

在sql server中,top n 問題很容易解決,如下例:從表stbdbdj中選取排序後的第一行資料進行指派。

在sql中解決方法很簡單,在select 後面加上:top n 即可,其中 n 代表行數。

在oracle中,沒有top n這個指令,我們采取把兩層查詢方式解決:首先,把需要查找的字段值直接進行排序,然後在外面進行第二次查詢,并使用rownum決定行數。

9、如何解決結果集傳回時,*

和變量同時存在的問題

下面例子表示,在用遊标傳回結果集時,同時傳回一個變量的值,在sql server中代碼如下所示:

但在oracle中卻沒有這種用法,’*’後面必需跟from。解決方法如下:

1)我們可以把 '*' 變成所需要選擇的字段,就是說采用表中需要顯示的全部字段表示*。

例如:

2)如果這個字段或者說變量是從另外一張表中取出來的,同樣可以采用下面的辦法。

10、用sql server裡case函數替換decode函數替換

sqlserver 沒有decode函數:

11、oracle的select … into問題

oracle裡直接取字段值,用select … into文法

sql server直接取則直覺的多,直接等于就可以了

12、update語句中 表别名問題

        因為有時候更新表時,需要從另一個表中更新資料,此處oracle update語句可以給表起别名。但在sql server中update語句不允許用别名,但可以直接使用表明引用。如下:

oralce: