2008-09-02 109 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