sql server 與 oracle的區別,sqloracle

來源:互聯網
上載者:User

sql server 與 oracle的區別,sqloracle

轉載於:http://blog.csdn.net/it_fengli/article/details/8213839

--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;
                  
                  
           自己總結的一點,僅供參考

相關文章

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.