簡體   English   中英

開發人員從SQL Server遷移到Oracle

[英]Developer moving from SQL Server to Oracle

我們正在內部推出一個新項目,而之前我們所有的工作都在SQL Server上,新產品使用了oracle后端。

任何人都可以建議任何嬰兒床單或類似的東西給像我這樣的SQL Server人員一個主要差異的概述 - 希望能夠盡快啟動和運行。

@hamishcmcn

你斷言'== Null是不正確的。 在關系世界中,Null只能被理解為“我不知道”。 將值與Null進行比較時,從Oracle(以及大多數其他正常的數據庫)獲得的唯一結果是“False”。

在我的腦海中,SQL Server和Oracle之間的主要區別是:

  • 學會愛交易,他們是你的朋友 - 自動提交不是。
  • 讀取一致性和缺少阻塞讀取
  • SQL Server數據庫== Oracle架構
  • PL / SQL比T-SQL更豐富
  • 了解Oracle中實例和數據庫之間的區別
  • 您可以在服務器上擁有多個Oracle實例
  • 沒有尖尖的點擊向導(除非你真的,真的想要它們)

其他人,請幫助我,並添加更多。

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

我也會查看數據類型,因為它們完全不同。

字符串連接:
甲骨文:|| 或者concat()
Sql Server:+

這些鏈接可能很有趣:
http://www.dba-oracle.com/oracle_news/2005_12_16_sql_syntax_differences.htm
http://www.mssqlcity.com/Articles/Compare/sql_server_vs_oracle.htm (舊版:Ora9 vs Sql 2000)

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

是相同的

INSERT INTO atable (a_varchar_column) VALUES (NULL);

我沒有sqlserver經驗,但據我所知,它區分了兩者

@hamishmcn

一般來說,這是一個壞主意。應該只創建並留下oracle中的臨時表(除非它是一次性/很少使用)。 臨時表的內容對於每個會話是本地的,並在會話關閉時被截斷。 支付創建/刪除臨時表的成本幾乎沒有意義,如果兩個進程同時嘗試創建表並且執行DDL時意外提交,則甚至可能導致沖突。

你在這里問的是一個很大的話題,特別是因為你還沒有真正說過你使用數據庫的是什么(例如,你是要從TSQL - > PL / SQL或只是改變后端數據庫你的java應用程序連接到?)

如果您認真考慮將數據庫選擇用於其主要內容,那么我建議您深入了解一下像Oracle Kyte的專家Oracle數據庫架構:9i和10g編程技術和解決方案

如果需要,可以使用“ 執行立即”命令在過程中創建和刪除臨時表。

對於andy47,我並不是說你可以在比較中使用空字符串,但如果在插入中使用它,oracle會將其視為null。 重新讀取我的條目,然后嘗試以下SQL:

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

並且為了避免“是的,不是不是”的情況, 這里是一個外部鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM