2008-09-02 107 views
7

我們正在內部引入一個新項目,而以前我們所有的工作都在SQL Server上,新產品使用了oracle後端。開發人員從SQL Server遷移到Oracle

任何人都可以建議任何嬰兒牀牀單或類似的東西給像我這樣的SQL Server人一個主要區別的概要 - 希望能夠儘快起牀和運行。

+0

此鏈接提供了很多的有用的總結主要區別: [oracle和ms sql server的區別](http://www.bristle.com/Tips/SQL.htm#differences_between_oracle_and_ms_sql_server) – 2008-09-06 19:47:59

回答

3

@hamishcmcn

你斷言''== Null根本不是真的。在關係世界裏,空值只能被理解爲「我不知道」。當您將值與Null進行比較時,您從Oracle(以及大多數其他體面的數據庫)得到的唯一結果是'False'。

關閉我的頭頂SQL Server和Oracle之間的主要區別是:

  • 學會愛交易,他們是你的朋友 - 自動提交沒有。
  • 讀一致性和缺乏阻斷讀取
  • SQL Server數據庫== Oracle模式
  • PL/SQL是一個很大的功能豐富且T-SQL
  • 瞭解實例和數據庫之間的區別甲骨文
  • 你可以有一個服務器
  • 沒有尖尖的clicky嚮導(除非你真的,真的希望他們)

大家對多個Oracle實例否則,請幫助我並添加更多內容。

1

注意空字符串處理方式的差異。
INSERT INTO atable (a_varchar_column) VALUES ('');

相同

INSERT INTO atable (a_varchar_column) VALUES (NULL); 

我沒有sqlserver經驗,但我明白,這兩個

2

區分我從SQL Server遷移到Oracle是注意到的主要區別在Oracle中,您需要在SELECT語句中使用遊標。 另外,臨時表的使用方式也不相同。在SQL Server中,您可以在過程中創建一個,然後在最後刪除它,但在Oracle中,應該已經在執行過程之前創建了一個臨時表。

我會看看數據類型,因爲它們很不相同。

1

@hamishmcn

普遍認爲是一個壞主意..應該只是被創建並留下在Oracle臨時表(除非它一次關閉/很少使用)。臨時表的內容對每個會話都是本地的,並在會話關閉時截斷。支付創建/刪除臨時表的成本幾乎沒有意義,如果兩個進程試圖同時創建表並且意外地執行DDL,則甚至可能導致衝突。

1

你在這裏提出的問題是一個巨大的話題,尤其是因爲你沒有真正地說過你正在使用數據庫(例如,你打算從TSQL - > PL/SQL或者只是改變後端數據庫Java應用程序連接到?)

如果你是嚴重的使用你的數據庫選擇的項目後備,那麼我建議你挖一個深一點,並宣讀由湯姆·凱特像Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions

0

到andy47,我不是那個意思,你可以使用比較中的空字符串,但是如果在插入中使用它,oracle會將它視爲null。 重新閱讀我的條目,那麼試試下面的SQL:

CREATE TABLE atable (acol VARCHAR(10)); 
INsERT INTO atable VALUES(''); 
SELECT * FROM atable WHERE acol IS NULL; 

,並避免了「的確是這樣,不,它不是」的情況下,here is an external link