--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 在巨型企业得到广泛的应用,向下兼容性好。风险小。
因篇幅问题不能全部显示,请点此查看更多更全内容