SQLServer與Oracle的對比,SQLServerOracle

來源:互聯網
上載者:User

SQLServer與Oracle的對比,SQLServerOracle

    最近去鐵科院面試,項目組長問了我這樣一下問題: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;
                  
                  

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.