SQL Server 与Oracle的不同点(从微观上)

当数据库是SQL Server的时候Enterprise Library访问起来非常方面,完全可以用Enterprise Library Configuration工具配置后就可以在代码中访问DB,但是当数据换成Oracle的时候就没有那么方便了,毕竟是两个公司的东西多少有些不同之处,下面就我知道的Oracle(以9i为例)与SQL Server的不同点总结一下:
1、数据类型的不同;
      SQL Server2000 Transact-SQL 的基本数据类型有:

bigint binary bit char cursor
datetime decimal float image int
money nchar ntext nvarchar real
smalldatetime smallint smallmoney text timestamp
tinyint varbinary varchar uniqueidentifier  


   SQL Server大家都比较熟悉,各个类型的含义就在此不一一列出。

      Oracle 9i基本数据类型有:

名称 含义
Char 用于描述定长的字符型数据,长度<=2000字节
varchar2 用于描述变长的字符型数据,长度<=4000字节
nchar 用来存储Unicode字符集的定长字符型数据,长度<=1000字节
nvarchar2 用来存储Unicode字符集的变长字符型数据,长度<=1000字节
number 用来存储整型或者浮点型数值
Date 用来存储日期数据
Long 用来存储最大长度为2GB的变长字符数据
Raw 用来存储非结构化数据的变长字符数据,长度<=2000字节
Long raw 用来存储非结构化数据的变长字符数据,长度<=2GB
rowid 用来存储表中列的物理地址的二进制数据,占用固定的10个字节
Blob 用来存储多达4GB的非结构化的二进制数据
Clob 用来存储多达4GB的字符数据
nclob 用来存储多达4GB的Unicode字符数据
Bfile 用来把非结构化的二进制数据存储在数据库以外的操作系统文件中
urowid 用来存储表示任何类型列地址的二进制数据
float 用来存储浮点数

2、自增行字段的区别
      在SQL Server 中为自增列(IDENTITY );
      在Oracle中为Oracle 序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列  号,Oracle 将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。
3、Stored Procedure的区别
      在大多数Oracle中的书籍中都称为“过程”,在SQL Server中叫存储过程。Oracle 过程与 Microsoft SQL Server 存储过程之间的主要区别是:返回结果集时,Oracle 过程必须将值作为输出参数返回,并且必须使用输出参数将结果集作为 REF CURSOR 对象返回给调用程序。
4、PL/SQL 和 T-SQL 中的存储过程之间的一个重大差异是 PL/SQL 所使用的 Oracle 包 结构。在 T-SQL 中没有等效元素。包是在逻辑上相关的编程块(如存储过程和函数)的容器。它包含两个部分:

●规范:定义包的名称,并为包中的每个存储过程或函数提供方法签名(原型)。规范头还定义所有全局声明。规范的样式类似于 C 或 C++ 头文件。
 
● 正文:包含包头中定义的存储过程和函数的代码。
 

每个存储过程或函数的参数都出现在括号内,并且用逗号分隔。每个参数还根据需要用以下三个标识符中的一个进行标记:

● IN:该值从调用应用程序传递到 PL/SQL 块。如果未指定标识符,则 IN 为默认传递方向。
 
● OUT:该值由存储过程生成,并传递回调用应用程序。
 
● INOUT:该值被传递到 PL/SQL 块,可能在该块内部进行修改,然后返回到调用应用程序。
 

每个参数也都被标记以指示数据类型。
5、关于Guid
      SQL Server有专门的uniqueidentifier 数据类型来存储Guid类型的字符,Oracle没有改数据类型;SQL中产生Guid使用函数NEWIDOracle中使用SYS_GUID(Oracle8i及其以后版本才引入);使用的示例分别为:
SQL Server:

SELECT NEWID()


Oracle:

SELECT SYS_GUID () FROM DUAL;

可以分别在SQL的查询分析器和TOAD中执行看看结果,SQL Server产生的是类似“C6D4ABBF-9AD6-4255-AADE-C0EDBF1E27B7”,而Oracle的为“5A9C4407068749C7B0662D351C099356”,两者还是有些区别

Feedback

#1楼 [楼主]   回复  引用  查看    

2007-04-13 11:51 by 漂泊雪狼
对数据库定义的不同:
A、在 Oracle,数据库是指整个 Oracle RDBMS 环境,它包括以下组件:
Oracle 数据库进程和缓冲(实例)。
SYSTEM 表空间包含一个集中系统类目,它可以由一个或多个数据文件构成。
其它由数据库管理员 (DBA)(可选)定义的表空间,每个都由一个或多个数据文件构成。
两个以上的联机恢复日志。
归档恢复日志(可选)。
其它文件(控制文件、Init.ora、Config.ora 等)。
b、Microsoft® SQL Server™ 2000 数据库提供了数据、应用程序和安全机制的逻辑分隔。一个 SQL Server 安装(实例)可以支持多个数据库。用 SQL Server 构建的应用程序可以用数据库来逻辑分隔业务功能。一台计算机上可以有多个 SQL Server 实例。每个 SQL Server 实例可以有多个数据库。
每个 SQL Server 数据库可以支持文件组,它提供了物理分布数据位置的能力。一个 SQL Server 文件组可以对含有单个 SQL Server 数据库数据的操作系统文件进行分类,以简化数据库管理任务,比如备份。文件组是 SQL Server 数据库的一个属性,不能包含多于一个数据库的操作系统文件,但一个数据库可以包含一个以上的文件组。创建数据库后,可以将文件组添加到数据库。

#2楼    回复  引用  查看    

2007-04-13 16:47 by pcstu [未注册用户]
你的文章我已经加上作者和出处,

http://www.pcstu.com/databases/MSsql/jc/20070212/24018.html

因为来源网络,我们并不知道来源和作者。
所以并没有加上,谢谢你的提醒!


标题
姓名
主页
Email (只有博主才能看到)
验证码 *  
内容(请不要发表任何与政治相关的内容)
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-04-07 10:36 编辑过
 
 
沪江技术团队寻觅新成员,下一位会是你吗?
IT人的互动社区—ZDNetChina中文社区



服务器托管服务商:零刻数据


posted on 2007-11-18 01:10  leup  阅读(512)  评论(0编辑  收藏  举报

导航