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: