繁体   English   中英

开发人员从SQL Server迁移到Oracle

[英]Developer moving from SQL Server to Oracle

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

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

@hamishcmcn

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

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

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

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

从SQL Server迁移到Oracle时我注意到的主要区别是,在Oracle中,您需要在SELECT语句中使用游标。 此外,临时表的使用方式也不同。 在SQL Server中,您可以在过程中创建一个,然后在最后将其DROP,但在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应用程序连接到?)

如果您认真考虑将数据库选择用于其主要内容,那么我建议您深入了解一下像Oracle Kyte的专家Oracle数据库架构:9i和10g编程技术和解决方案

如果需要,可以使用“ 执行立即”命令在过程中创建和删除临时表。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM