當數據庫是SQL Server的時候EnterPRise Library訪問起來非常方面,完全可以用Enterprise Library Configuration工具配置后就可以在代碼中訪問DB,但是當數據換成Oracle的時候就沒有那么方便了,畢竟是兩個公司的東西多少有些不同之處,下面就我知道的Oracle(以9i為例)與SQL Server的不同點總結一下:
1、數據類型的不同;
SQL Server2000 Transact-SQL 的基本數據類型有:
| bigint | binary | bit | char | cursor |
| datetime | decimal | float | image | int |
| money | nchar | ntext | nvarchar | real |
| smalldatetime | smallint | smallmoney | text | timestamp |
| tinyint | varbinary | varchar | uniqueidentifier |
SQL Server大家都比較熟悉,各個類型的含義就在此不一一列出。
Oracle 9i基本數據類型有:
| 名稱 | 含義 |
| Char | 用于描述定長的字符型數據,長度<=2000字節 |
| varchar2 | 用于描述變長的字符型數據,長度<=4000字節 |
| nchar | 用來存儲Unicode字符集的定長字符型數據,長度<=1000字節 |
| nvarchar2 | 用來存儲Unicode字符集的變長字符型數據,長度<=1000字節 |
| number | 用來存儲整型或者浮點型數值 |
| Date | 用來存儲日期數據 |
| Long | 用來存儲最大長度為2GB的變長字符數據 |
| Raw | 用來存儲非結構化數據的變長字符數據,長度<=2000字節 |
| Long raw | 用來存儲非結構化數據的變長字符數據,長度<=2GB |
| rowid | 用來存儲表中列的物理地址的二進制數據,占用固定的10個字節 |
| Blob | 用來存儲多達4GB的非結構化的二進制數據 |
| Clob | 用來存儲多達4GB的字符數據 |
| nclob | 用來存儲多達4GB的Unicode字符數據 |
| Bfile | 用來把非結構化的二進制數據存儲在數據庫以外的操作系統文件中 |
| urowid | 用來存儲表示任何類型列地址的二進制數據 |
| float | 用來存儲浮點數 |
2、自增行字段的區別
在SQL Server 中為自增列(IDENTITY );
在Oracle中為Oracle 序列是原子對象,并且是一致的。也就是說,一旦您訪問一個序列 號,Oracle 將在處理下一個請求之前自動遞增下一個編號,從而確保不會出現重復值。
3、Stored Procedure的區別
在大多數Oracle中的書籍中都稱為“過程”,在SQL Server中叫存儲過程。Oracle 過程與 Microsoft SQL Server 存儲過程之間的主要區別是:Oracle 過程必須將值作為輸出參數返回,并且必須使用輸出參數將結果集作為 REF CURSOR 對象返回給調用程序。
4、PL/SQL 和 T-SQL 中的存儲過程之間的一個重大差異是 PL/SQL 所使用的 Oracle 包 結構。在 T-SQL 中沒有等效元素。包是在邏輯上相關的編程塊(如存儲過程和函數)的容器。它包含兩個部分:
●規范:定義包的名稱,并為包中的每個存儲過程或函數提供方法簽名(原型)。規范頭還定義所有全局聲明。規范的樣式類似于 C 或 C++ 頭文件。
● 正文:包含包頭中定義的存儲過程和函數的代碼。
每個存儲過程或函數的參數都出現在括號內,并且用逗號分隔。每個參數還根據需要用以下三個標識符中的一個進行標記:
● IN:該值從調用應用程序傳遞到 PL/SQL 塊。如果未指定標識符,則 IN 為默認傳遞方向。
● OUT:該值由存儲過程生成,并傳遞回調用應用程序。
● INOUT:該值被傳遞到 PL/SQL 塊,可能在該塊內部進行修改,然后返回到調用應用程序。
每個參數也都被標記以指示數據類型。
新聞熱點
疑難解答