国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Oracle常用知識(shí)小總結(jié)

1. 創(chuàng)建自增主鍵     

       對(duì)于習(xí)慣了SQL SERVER的圖形化界面操作的SQLer,很長(zhǎng)一段時(shí)間不用oracle,創(chuàng)建一個(gè)帶自增字段的主鍵的表都覺(jué)得很費(fèi)事,但是習(xí)慣了之后也還好,其實(shí)也可 以用EA設(shè)計(jì)好表結(jié)構(gòu)之后,直接生成SQL,這里只是為了演示如何通過(guò)SQL語(yǔ)句創(chuàng)建表。     

       示例:     

        1)創(chuàng)建表     

        Create Table Test (      ID int,      Name varchar2(200),      Primary Key(ID)      )     

       2)創(chuàng)建自增序列     

        Create Sequence Test_Sequence

        Increment by 1     

        Start with 1     

        Nomaxvalue     

        Nocycle     

       3)創(chuàng)建觸發(fā)器     

       Create Or Replace Trigger Test_Trigger     

       Before Insert On Test     

       For Each Row     

       Begin     

       select Test_Sequence.Nextval Into :new.id From dual;     

       End;

        以上三步就完成了帶有主鍵的自增序列的表的創(chuàng)建。  

      2. 修改表名、字段名、字段類型、長(zhǎng)度    

       在實(shí)際的開(kāi)發(fā),會(huì)有遇到需要修改表名、字段的一些情況,下面就這種修改一一說(shuō)明。      

      1)修改表名:         Alter Table Test Rename To Test1      

      2)修改字段名         Alter Table Test Rename Column Name To Name1      

      3)新增字段         Alter Table Test Add Age int      

      4)刪除字段         Alter Table Test drop column Age      

      5) 修改字段類型、長(zhǎng)度         Alter Table Test Modify Age number(8,2)  

      3. 時(shí)間、日期相關(guān)     

       在oracle數(shù)據(jù)庫(kù)中,沒(méi)有專門(mén)的date數(shù)據(jù)類型,有時(shí)候我們只需要存儲(chǔ)日期,不需要時(shí)間,而我們?cè)跀?shù)據(jù)庫(kù)存儲(chǔ)時(shí)都會(huì)自動(dòng)加上日期,針對(duì)于這樣的情況,我們可以通過(guò)以下方式處理:        

       未使用trunc時(shí),查詢結(jié)果如下:         select sysdate from dual         2013-12-22 12:06:16        

       使用trunc之后,結(jié)果如下:         select trunc(sysdate) from dual         2013-12-22        

       這樣我們可以通過(guò)update語(yǔ)句加上trunc將日期+時(shí)間(2013-12-22 12:03:03)的存儲(chǔ)改成日期(2012-12-22)形式,事實(shí)上數(shù)據(jù)庫(kù)內(nèi)部存儲(chǔ)的也還是“2013-12-22 00:00:00”只不過(guò)在查詢顯示的時(shí)候,展示的是日期形式。       

       下面講一下,oracle中如何獲取當(dāng)前年、月、日、季度、星期、星期幾。        

       獲取當(dāng)前年:         select to_char(sysdate,‘yy’) from dual        

       獲取當(dāng)前月:         select to_char(sysdate,‘MM’) from dual        

       獲取當(dāng)前天:         select to_char(sysdate,‘dd’) from dual        

       獲取當(dāng)前季度:         select to_char(sysdate,‘Q’) from dual        

       獲取當(dāng)前第幾個(gè)星期:         select to_char(sysdate,‘iw’) from dual        

       獲取當(dāng)前是星期幾:         select to_char(sysdate,‘day’) from dual

       4. Top N     

       在oracle中,不能使用top,但是也有相應(yīng)的替代的解決辦法,就是使用rownum。比如我們想取某些信息集合的top5,具體演示如下:      

       with as sub       ( select *,rownow as PX from Test)      

       select * from PX where PX<6      

       這樣就解決了top問(wèn)題,在使用這樣方式查詢top N時(shí),最好先按照某些字段對(duì)數(shù)據(jù)源進(jìn)行排序。  

      5. 多表關(guān)聯(lián)更新     

       在實(shí)際的開(kāi)發(fā)中,有時(shí)會(huì)需要將某一個(gè)表的字段內(nèi)容更新為另一個(gè)表的字段內(nèi)容,這個(gè)時(shí)候就會(huì)用到多表關(guān)聯(lián)更新。在SQL Server中,我們可以這樣做:       

      update t set id=t1.id        from Test t        inner join Test1 t1 on t.no=t1.no

       但是,在Oracle中卻不支持這樣的用法,當(dāng)然也有替代的方法可用,我們可用通過(guò)使用子查詢的方式來(lái)實(shí)現(xiàn),如下:      

       update Test t       set t.id=(select t1.id from Test1 t1 where t1.no=t.no)       where exists(select * from Test1 t1 where t1.no=t.no)      

       需要注意的是子查詢的值,只能是一個(gè)唯一值,不能是多值。后邊的where exists也是很重要的,如果沒(méi)有的話,所得到的結(jié)果可能會(huì)有誤。  

       還有如果是在數(shù)據(jù)庫(kù)里做更新、刪除、新增的操作,一定要記得commit提交,要不然在程序里是查詢不到已修改的變化。

      6. 存儲(chǔ)過(guò)程、函數(shù)    

      關(guān)于存儲(chǔ)過(guò)程和函數(shù)在數(shù)據(jù)庫(kù)中都是經(jīng)常用到的,在sql server和oracle中語(yǔ)法稍有不太一樣,這里就只做兩個(gè)簡(jiǎn)單的示例即可。       

      存儲(chǔ)過(guò)程:       

      一般的語(yǔ)法:      

      Create Or Replace Procedure 存儲(chǔ)過(guò)程名 (parm1 in type,parm2 out type,....)      

      as      

      變量  類型 范圍;--(例:name varchar2(200);)      

      變量  類型 范圍;--(例:age number(8);)    

      begin      

      select * from Test where Name=name;       --有判斷的存儲(chǔ)過(guò)程      

      if(age<10) then          .......;      

      elsif (age>10 and age<20) then          ........;      

      else          raise NO_DATA_FOUND;      

      end if;      

      Exception         

      when others then          Rollback;      

     end;

     示例:

     Create Or Replace TestAge(age in int,agegroup out varchar2(200))       

     as       

     age_group varchar2(200);       

     begion       

     if(age<=10) then       

     age_group:="幼年";       

     elsif(age>10 and age<18)       

     age_group:="青少年";       

     else        age_group:="成年";       

     end if;       

     agegroup:=age_group;      

     end;

     函數(shù):  

     一般語(yǔ)法:

     Create Or Replace Function 函數(shù)名 (   參數(shù)名 in/out  參數(shù)類型,   參數(shù)名 in/out  參數(shù)類型,   ..... )

     return 類型

     as 參數(shù)名 類型;--(例:name varchar2(200);) ....

     begin

     ......

     ......

     retrun expression;

     end 函數(shù)名;

     示例:  

     Create Or Replace Function GetAgeGroup (age in int)

      retrun varchar2

      as agegroup varchar2(200);

      begin if(age<10) then   agegroup:="幼年";

      elsif(age>=10 and age <18) then    agegroup="青年";

      else    agegroup="成年";

      end if; retrun agegroup;

      end GetAgeGroup;

      這一塊的內(nèi)容沒(méi)有什么別的意義,只是Oracle的函數(shù)和存儲(chǔ)過(guò)程跟sql的有些不同,僅供參考,區(qū)分使用。  

      7. 索引    

       關(guān)于索引,即使在sql server中一般也很少使用,因?yàn)閿?shù)據(jù)量還沒(méi)有那么大,這次項(xiàng)目中因?yàn)闋砍兜臄?shù)據(jù)量比較大,即使在oracle,查詢、檢索速度還是不行,所以需要?jiǎng)?chuàng)建 索引。但是索引創(chuàng)建之后,跟沒(méi)創(chuàng)建沒(méi)有什么差別,后來(lái)經(jīng)過(guò)分析才得知,oracle 中的索引的創(chuàng)建還是有很多的規(guī)矩的,下面就簡(jiǎn)要是列一下需要注意的事項(xiàng)。    

       1)索引應(yīng)該在SQL語(yǔ)句中“Where”或者“and”部分涉及的表的列創(chuàng)建。    

       2)Order by中用索引。需要注意的是Order by中所有的列都包含在相同的索引中并保持在索引中的排列順序,且order by中所有的列必須定義為非空,否則索引無(wú)效。    

       3)避免改變索引列的類型。       

            例如:select * from EMP              where EMP_TYPE='123'       

                     事實(shí)上oracle在執(zhí)行的時(shí)候,會(huì)執(zhí)行如下語(yǔ)句:             

                     select * from EMP              where EMP_TYPE=to_number('123')       

                     這樣類型轉(zhuǎn)化并沒(méi)有發(fā)生在索引列上,所以索引仍舊有效,但是,如果寫(xiě)成這樣,索引就會(huì)失效的。          

                     select * from EMP           where to_number(EMP_TYPE)=123      

                     因?yàn)樗饕械念愋桶l(fā)生了變化,所以索引失效了。    

      4)在Where子句中需要特別注意的是,不是所有的索引列都會(huì)有效。    

           例如:       

                  a)在where 子句中使用了 “!=”這樣索引也是無(wú)效的,       

                  b)除此之外還有使用“||"字符拼接,也會(huì)導(dǎo)致索引失效。

                  c) 還有相同索引列也不能用來(lái)比較,也會(huì)導(dǎo)致索引失效。

                 d) IS NULL 和 IS NOT NULL也會(huì)導(dǎo)致索引失效。

                 e) 函數(shù)的使用,也會(huì)導(dǎo)致索引失效    

     5)在經(jīng)常用在連接上的列上創(chuàng)建索引,可以加快連接的速度,這些列主要是一些外鍵。    

     6)在主鍵列上創(chuàng)建索引,可以強(qiáng)制該列的唯一性并且組織表中的數(shù)據(jù)的排列結(jié)構(gòu)。

     7)對(duì)于列值經(jīng)常修改變動(dòng)的列,不適合創(chuàng)建索引,因?yàn)樵黾铀饕龝?huì)降低修改性能,同樣,增加修改性能會(huì)降低索引性能。

     8)對(duì)于只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引,因?yàn)榻Y(jié)果集的數(shù)據(jù)行占據(jù)了表中數(shù)據(jù)行的很大比例,增加索引并不能增加檢索速度。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ORACLE中通過(guò)SQL語(yǔ)句(alter table)來(lái)增加、刪除、修改字段
關(guān)于索引一些用法介紹(db2)
oracle 全文檢索實(shí)踐
又見(jiàn)程序媛 | 從索引的創(chuàng)建角度分析熱門(mén)“面試題”
oracle移植到mysql
Oracle中insert into select和select into的用法(異常0RA-00905:missing keyword的解決)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服