[英]Developer moving from SQL Server to Oracle
我們正在內部推出一個新項目,而之前我們所有的工作都在SQL Server上,新產品使用了oracle后端。
任何人都可以建議任何嬰兒床單或類似的東西給像我這樣的SQL Server人員一個主要差異的概述 - 希望能夠盡快啟動和運行。
@hamishcmcn
你斷言'== Null是不正確的。 在關系世界中,Null只能被理解為“我不知道”。 將值與Null進行比較時,從Oracle(以及大多數其他正常的數據庫)獲得的唯一結果是“False”。
在我的腦海中,SQL Server和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.