zoukankan      html  css  js  c++  java
  • SQLServer与Oracle的对比

        最近去铁科院面试,项目组长问了我这样一下问题:SQLServer与Oracle的区别是什么?从进入软件行业,从开始CS的编码到BS的编码过程中使用的都是SQLServer,在半年前开始敲DRP的过程中才接触到Oracle,当时给我的感觉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;
          
          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;
                      
                      

  • 相关阅读:
    吉哥系列故事――恨7不成妻
    K
    F
    树状数组
    34.在排序数组中查找元素的第一个和最后一个位置--二分查找
    CSS选择器及其权重
    CSS布局 圣杯和双飞翼
    983. 最低票价 -- 动态规划
    合并k个排序链表 二分
    面试题 16.03. 交点
  • 原文地址:https://www.cnblogs.com/xzpblog/p/5117924.html
Copyright © 2011-2022 走看看