我们正在内部推出一个新项目,而之前我们所有的工作都在SQL Server上,新产品使用了oracle后端。
任何人都可以建议任何婴儿床单或类似的东西给像我这样的SQL Server人员一个主要差异的概述 - 希望能够尽快启动并运行。
答案 0 :(得分:3)
@hamishcmcn
你断言“== Null是不正确的。在关系世界中,Null只能被理解为“我不知道”。将值与Null进行比较时,从Oracle(以及大多数其他正常的数据库)获得的唯一结果是“False”。
在我的脑海中,SQL Server和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