7

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

任何人都可以建议任何婴儿床单或类似的东西,让像我这样的 SQL Server 人员大致了解主要区别是什么 - 希望能够尽快启动和运行。

4

8 回答 8

3

@hamishcmcn

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

在我看来,SQL Server 和 Oracle 之间的主要区别是:

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

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

于 2008-09-03T02:52:17.677 回答
2

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

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

于 2008-09-02T14:00:06.207 回答
2

字符串连接:
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)

于 2008-09-04T14:30:38.143 回答
1

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

是相同的

INSERT INTO atable (a_varchar_column) VALUES (NULL);

我没有sqlserver经验,但我知道它区分了两者

于 2008-09-02T13:10:26.857 回答
1

@hamishmcn

通常这是一个坏主意.. oracle 中的临时表应该被创建并离开(除非它曾经关闭/很少使用)。临时表的内容对于每个会话都是本地的,并在会话关闭时被截断。支付创建/删除临时表的成本没有什么意义,如果两个进程尝试同时创建表和执行 DDL 的意外提交,甚至可能导致冲突。

于 2008-09-03T02:41:25.970 回答
1

你在这里问的是一个巨大的话题,特别是因为你还没有真正说出你使用数据库的目的(例如,你是要从 TSQL -> PL/SQL 还是只是更改你的 Java 应用程序的后端数据库连接到?)

如果您认真考虑使用您的数据库选择来发挥其潜力,那么我建议您深入挖掘并阅读Tom Kyte 的Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions之类的内容。

于 2008-09-03T03:14:47.357 回答
0

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

于 2008-09-02T14:10:50.267 回答
0

对于 andy47,我并不是说您可以在比较中使用空字符串,但是如果您在插入中使用它,oracle 会将其视为 null。重新阅读我的条目,然后尝试以下 SQL:

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

为了避免“是的,不是的”的情况,这里是一个外部链接

于 2008-09-06T18:48:39.847 回答