SQL SERVER与ORACLE的几点区别
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;
SQL Server中有五种约束类型,分别是 PRIMARY KEY约束、FOREIGN KEY约束、UNIQUE约束、DEFAULT约束、和CHECK
oracle 中添加默认值:alter table table_name modify(sex default('男'));
oracle之约束
一、维护数据的完整性
概述:数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。在Oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选。
1、约束
约束用于确保数据库数据满足特定的商业规则。在Oracle中,约束包括:not null、unique、primary key, foreign key和check五种。
A、not null(非空)
如果在列上定义了not null,那么当插入数据时,必须为列提供数据。
B、unique(唯一)
当定义了唯一约束后,该列值是不能重复的,但是可以为null。
C、primary key(主键)
用于唯一的标识表行的数据,当定义主键约束后,该列不但不能重复而且不能为NULL。一张表最多只能有一个主键,但是可以由多个unique约束。
D、foreign key(外键)
用于定义主表和从表之间的关系,外键约束要定义在从表上,主要则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为NULL。
E、check
用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000~2000之间,如果不在1000~2000之间就会提示出错。
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 2005后已经都支持case column when value与case when column = value,oracle也是)
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与ORACLE的几点区别的更多相关文章
- sql server,mysql,oracle平时用法的区别
由于工作的原因,上家公司一直使用的oracle,后来接触了的几个项目,既有使用mysql的又有使用sqlserver,自己在使用sqlserver及mysql要实现某功能时,经常要在网上找来找去,所以 ...
- 【转】SQL Server与Oracle的区别
转自:http://soft.chinabyte.com/database/255/12258255.shtml SQL Server与Oracle的区别 2012-02-10 00:00 中国IT实 ...
- 数据库 --> SQL Server 和 Oracle 以及 MySQL 区别
SQL Server 和 Oracle 以及 MySQL 区别 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非 ...
- SQL Server,MySQL,Oracle三者的区别
SQL Server,MySQL,Oracle三者的区别 2016-10-14 转自:SQL Server,MySQL,Oracle三者的区别 目录 1 Oracle.Sql Server.MySql ...
- sql server 与 oracle的区别(转)
--1.数据类型不同. --sql server 的数据类型:int ,smallint ,char,varchar,nchar,nvarchar,ntext,datetime,smalld ...
- ASP.NET 连接 SQL Server 和 Oracle 教程
临近期末,有很多同学都问我怎么关于ASP.NET 连接 SQL Server 和 Oracle 的问题.由于人太多了,我也不能一一去帮忙,就写了这篇博客.希望对大家有用处. 首先,前期准备是要安装数据 ...
- SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别
SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方 ...
- SQL Server 表变量和临时表的区别
SQL Server 表变量和临时表的区别 一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯 ...
- 关于sql server远程访问Oracle数据库 OpenQuery查询返回多条数据的问题
在Sql Server远程访问Oracle 中的数据库表时: 远程语法通常为: select * from OpenQuery(Oracle链接服务器名称,‘查询语句’) eg: select * f ...
随机推荐
- vue回到顶部的事件
其实只需要一句代码就好了: document.documentElement.scrollTop = document.body.scrollTop = ;
- linux制做RPM包
制作rpm包 1.制作流程 1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好 ...
- WP8.1学习系列(第十七章)——交互UX之输入和反馈模式
如果你将 Windows 应用商店应用设计为触摸交互,则可免费获取对触摸板.鼠标.笔和键盘交互的支持.你的用户可以从一种输入法切换到另一种,而不会丧失应用体验的感觉.将键盘插入平板电脑?没问题.你的应 ...
- delphi 10 Seattle 第一个Android程序
delphi 10 Seattle 第一个Android程序 1.打开Delphi RAD Studio Seattle,如下图 2.选择black application 点击OK 3. ...
- Delphi Code Editor 之 几个特性
Delphi Code Editor有几个特性在编写大规模代码时非常有用.下面分别进行介绍: 1.Code Templates(代码模板) 使用代码模板可把任意预定义代码(或正文)插入到单元文件中.当 ...
- pace.js简介
Pace.js – 超赞的页面加载进度自动指示和 Ajax 导航效果 在页面中引入 Pace.js 和您所选择主题的 CSS 文件,就可以让你的页面拥有漂亮的加载进度和 Ajax 导航效果.不需要挂接 ...
- Repeater嵌套绑定Repeater以及内层调用外层数据
aspx: <table border=" style="margin-bottom: 5px" width="100%"> <as ...
- sencha touch list 选择插件,可记忆已选项,可分组全选
选择记忆功能参考:https://market.sencha.com/extensions/ext-plugin-rememberselection 插件代码: /* * 记住列表选择状态 * 如果分 ...
- linux下php的一些问题
一.Loaded Configuration File none Configuration File (php.ini) Path /data/service/php/etc 在etc目录下有ph ...
- 微信公众号关联(小游戏 小程序 跳转 盒子 wx.navigateToMiniProgram)
参考: 公众号关联小程序 关联公众号 关联后,登录小游戏,可在设置-关联设置中看到关联的公众号 在小游戏中使用wx.navigateToMiniProgram wx.navigateToMiniPro ...