我们正在内部带来一个新项目,而以前我们所有的工作都是在 SQL Server 上,新产品使用了 oracle 后端。
任何人都可以建议任何婴儿床单或类似的东西,让像我这样的 SQL Server 人员大致了解主要区别是什么 - 希望能够尽快启动和运行。
我们正在内部带来一个新项目,而以前我们所有的工作都是在 SQL Server 上,新产品使用了 oracle 后端。
任何人都可以建议任何婴儿床单或类似的东西,让像我这样的 SQL Server 人员大致了解主要区别是什么 - 希望能够尽快启动和运行。
@hamishcmcn
您关于 '' == Null 的断言根本不正确。在关系世界中,Null 只能被解读为“我不知道”。当您将值与 Null 进行比较时,您从 Oracle(以及大多数其他体面的数据库)获得的唯一结果是“False”。
在我看来,SQL Server 和 Oracle 之间的主要区别是:
其他人,请帮助我并添加更多内容。
我注意到从 SQL Server 迁移到 Oracle 的主要区别是,在 Oracle 中,您需要在 SELECT 语句中使用游标。此外,临时表的使用方式也不同。在 SQL Server 中,您可以在过程中创建一个,然后在最后 DROP 它,但在 Oracle 中,您应该在执行过程之前已经创建了一个临时表。
我也会看数据类型,因为它们完全不同。
字符串连接:
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 应用程序的后端数据库连接到?)
如果您认真考虑使用您的数据库选择来发挥其潜力,那么我建议您深入挖掘并阅读Tom Kyte 的Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions之类的内容。
如果需要,您可以使用Execute Immediate命令在过程中创建和删除临时表。
对于 andy47,我并不是说您可以在比较中使用空字符串,但是如果您在插入中使用它,oracle 会将其视为 null。重新阅读我的条目,然后尝试以下 SQL:
CREATE TABLE atable (acol VARCHAR(10));
INsERT INTO atable VALUES( '' );
SELECT * FROM atable WHERE acol IS NULL;
为了避免“是的,不是的”的情况,这里是一个外部链接