开发人员从SQL Server迁移到Oracle

时间:2008-09-02 13:01:07

标签: sql-server database oracle

我们正在内部推出一个新项目,而之前我们所有的工作都在SQL Server上,新产品使用了oracle后端。

任何人都可以建议任何婴儿床单或类似的东西给像我这样的SQL Server人员一个主要差异的概述 - 希望能够尽快启动并运行。

8 个答案:

答案 0 :(得分:3)

@hamishcmcn

你断言“== Null是不正确的。在关系世界中,Null只能被理解为“我不知道”。将值与Null进行比较时,从Oracle(以及大多数其他正常的数据库)获得的唯一结果是“False”。

在我的脑海中,SQL Server和Oracle之间的主要区别是:

  • 学会热爱交易,他们是你的朋友 - 自动提交不是。
  • 读取一致性和缺少阻止读取
  • SQL Server数据库== Oracle架构
  • PL / SQL比T-SQL
  • 功能更丰富
  • 了解Oracle中实例和数据库之间的区别
  • 您可以在服务器上拥有多个Oracle实例
  • 没有尖尖的点击向导(除非你真的,真的想要它们)

其他人,请帮助我并添加更多。

答案 1 :(得分:2)

从SQL Server迁移到Oracle时我注意到的主要区别是,在Oracle中,您需要在SELECT语句中使用游标。 此外,临时表的使用方式也不同。在SQL Server中,您可以在一个过程中创建一个,然后在最后将其删除,但在Oracle中,您应该已经在执行过程之前创建了一个临时表。

我也会查看数据类型,因为它们完全不同。

答案 2 :(得分:2)

字符串连接:
甲骨文:||或者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)

答案 3 :(得分:1)

注意空字符串处理方式的不同 INSERT INTO atable (a_varchar_column) VALUES ('');

相同
INSERT INTO atable (a_varchar_column) VALUES (NULL);

我没有sqlserver经验,但据我所知,它区分了两个

答案 4 :(得分:1)

@hamishmcn

一般来说这是一个坏主意。应该只创建并保留oracle中的临时表(除非它是一次性/很少使用)。临时表的内容对于每个会话是本地的,并在会话关闭时被截断。支付创建/删除临时表的成本几乎没有意义,如果两个进程同时尝试创建表并且执行DDL时意外提交,甚至可能导致冲突。

答案 5 :(得分:1)

你在这里问的是一个很大的话题,特别是因为你还没有真正说过你使用数据库的原因(例如,你是要从TSQL开始 - > PL / SQL还是只改变后端您的java应用程序连接到的数据库?)

如果您认真考虑将数据库选择用于其中,那么我建议您深入挖掘并阅读Tom Kyte撰写的Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions内容。

答案 6 :(得分:0)

如果需要,可以使用Execute Immediate命令在过程中创建和删除临时表。

答案 7 :(得分: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