搜索
您的当前位置:首页正文

oracle与sqlserver的十大区别

来源:知库网
--sql server 与 oracle的区别: --DBMS 数据库管理系统 --1.数据类型不同。

--sql server 的数据类型:

int ,smallint ,char,varchar,nchar,nvarchar,ntext,datetime,smalldatetime,money,decima, --float,bit……

--oracle 的数据类型:number(p,s),char,varchar2,Date,LOB --注意:insert into table_name values('1','张三','男',date'2012-3-5');---插入字符串日期前加date转换类型

--2.获得当前系统时间的函数不同。 --sql server :getdate()

--oracle:sysdate

--例如:设定日期格式的函数:to_char(sysdate,'yyy-mm-dd'); --3.在oracle中没有默认约束的说法

--sql server 中添加默认约束:alter table talbe_name add DF_table_name default('男') for sex;

--oracle 中添加默认值:alter table table_name modify(sex default('男'));

--4.连接变量和字符串的方式不一样

--sql server 中连接:使用“+”连接,例如:print 'aaaa'+@name;

--oracle 中连接:使用“||”连接,例如:dbms_output.put_line('aaa'||name);---name为变量

--5.oracle没有identity自动增长列,而是使用序列实现增长

--sql server 自动增长:在表的主键列中可直接使用identity(1,1)实现增长

--oracle 使用序列自动增长:

create sequence se_id start with 1 increment by 1 --使用序列实现自动增长:se_id.nextval --6.条件语句if……else……的语法不同 --sql server中: if 条件 begin

………… end else begin

………… end --oracle中: if 条件1 then …………; elsif 条件2 then …………; else

…………; end if;

--7.case语句的语法不同 --sql server中:

--select ....case.....(else)....end....语句 select stuno '学号',case

when grade>=90 and grade<=100 then '★★★★' when grade>=80 and grade<90 then '★★★' when grade>=70 and grade<80 then '★★' when grade>=60 and grade<70 then '★' else '差'

end as '等级' from score go --oracle中: declare

nums number:=&nos;--&nos表示提示传入值 begin

case nums

when 100 then

dbms_output.put_line('满分也,不错'); when 90 then

dbms_output.put_line('90分页很不错了'); end case; end; --8.触发器创建语法不同 --sql server中:

--首先判断触发器是否已经存在

if exists (select * from sys.sysobjects where name='tr_delete') --如果存在先删除 drop trigger tr_delete

go

--创建触发器

create trigger tr_delete on bookInfo

instead of delete as

--定义变量

declare @bookid int

select @bookid=Bookid from deleted---deleted执行删除语句( delete from BookInfo where BookId=1),自动生成的deleted表 --删除与该图书的相关记录(先删除从表再删除主表) delete from borrowinfo where bookid=@bookid delete from backinfo where bookid=@bookid delete from BookInfo where BookId=@bookid --判断 if @@error<>0 begin

print '删除失败' rollback transaction end else begin

print '删除成功'

end go

delete from BookInfo where BookId=1

--oracle中: --创建触发器

create or replace trigger tri_test before insert or update or delete on table_name

[for each row]---如果要使用 :new /:old 就必须使用行触发器

declare

nums varchar2(20); begin

select 'F'||lpad('aa',5,0) into nums from dual; end;

--9.oracle中的存储过程

--sql server中存储过程:

--判断存储过程是否已经存在

if exists(select * from sys.sysobjects where name='proc_name') --如果存在先删除 drop proc proc_name go

--创建存储过程语句

create proc/procedure proc_name @参数名1 数据类型 [out/output], @参数名2 数据类型 [out/output] as

………… go

--调用存储过程

--如果有输出参数,则需定义变量(假设@参数2为输出参数) declare @变量名 数据类型

exec proc_name @参数名1='aaa',@参数名2=@变量名 out

---oracle中带游标及循环的存储过程

create or replace procedure proc_selCurrent (

names varchar2 ) as

cursor cursor_sel is

select DepositSum,cardType,name,state from CurrentAccount where name like '%'||names||'%'; dd number; cc number;

nn varchar2(20); sta number; begin

open cursor_sel; loop

fetch cursor_sel into dd,cc,nn,sta; dbms_output.put_line('存款金额:'||dd||'姓名:'||nn);

exit when cursor_sel%notfound; end loop; close cursor_sel; end;

--调用存储过程 begin

proc_selCurrent('a'); end; --10.创建用户的方式不同 --sql server中

--1、创建登陆账号:sa-----123456

create Login 登陆名称 with password='登陆密码'

--修改登陆账户:

alter Login 登陆名称 with name='新登录名称' and password='新登录密码' --禁用/启用登陆账号

alter Login 登录名称 disable(禁用)/enable(启用) --删除登陆账号

drop Login 登录名称

--2、创建用户:

create user 用户名 for/from Login 登陆名称

--修改用户名

alter user 用户名 with name='新用户名'

--删除用户名 drop user 用户名

---授权限

grant select/update/delete/insert on 表名 to 用户名

---oracle中:

---创建用户语法: create user 用户名 identified by 密码 default tablespace users

temporary tablespace temp quota 10M on users

--修改密码:

alter user 用户名 identified by 新密码

--授予权限:

grant create session to 用户名

--删除用户

drop user 用户名 cascade;

开放性:

SQL Server 只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据量的关键业务时.

Oracle 能在所有主流平台上运行(包括windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。

DB2 能在所有主流平台上运行(包括windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%.

可伸缩性,并行性

SQL Server DB2 并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。

Oracle 平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。如果Windows NT不能满足需要, 用户可以把数据库移到UNIX中。

DB2 DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境. 数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日 志。数据库分区有时被称为节点或数据库节点

安全性

SQL Server 没有获得任何安全证书。

Oracle Server 获得最高认证级别的ISO标准认证。 DB2 获得最高认证级别的ISO标准认证。

性能

SQL Server 多用户时性能不佳

Oracle 性能最高,保持windowsNT下的TPC-D和TPC-C的世界记录。 DB2 适用于数据仓库和在线事物处理, 性能较高。

客户端支持及应用模式

SQL Server C/S结构,只支持Windows客户,可以用ADO,DAO,OLEDB ,ODBC连接.

Oracle 多层次网络计算,支持多种工业标准,可以用ODBC, JDBC,OCI等网络客户连接

DB2 跨平台,多层结构,支持ODBC,JDBC等客户

操作简便

SQL Server 操作简单,但只有图形界面.

Oracle 较复杂, 同时提供GUI和命令行,在windowsNT和unix下操作相同 DB2 操作简单,同时提供GUI和命令行,在windowsNT和unix下操作相同

使用风险

SQL Server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。

Oracle 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。 DB2 在巨型企业得到广泛的应用,向下兼容性好。风险小。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top