版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一驗(yàn)證Oraclle已經(jīng)安裝裝完成了,首首先得確認(rèn)程程序里有這些些個(gè)選項(xiàng),有有四個(gè)選項(xiàng):Oraclle Insstallaation Produucts、集集成管理工具具、配置和移植工工具(管理員員用得比較多多)、應(yīng)用程程序開(kāi)發(fā)。Oraclle也可以形形成一種層次次性的鏈接(DDirecttory MManageer),對(duì)于我們來(lái)來(lái)說(shuō)用得最多多是sqlpplus,而而OLE 是是一種面向?qū)?duì)象的技術(shù),利利用這種技術(shù)術(shù)可開(kāi)發(fā)可重重復(fù)使用的軟軟件組件(CCOM),他他是微軟提出出的,在用VVB開(kāi)發(fā)時(shí)可可能要用,對(duì)對(duì)于我們來(lái)說(shuō)說(shuō)不須管。當(dāng)啟動(dòng)sqllplus時(shí)時(shí)會(huì)提示輸入入用戶(hù)名和口口令,所謂的的s
2、qlpllus是Orracle的的一個(gè)客戶(hù)端端。Oraccle大多數(shù)數(shù)命令都用命命令來(lái)實(shí)現(xiàn),所所以比較難使使,就如同uunix比wwindowws難使。口口令你輸入ttiger,建建議就用它,因因?yàn)橐院笕テ笃髽I(yè)里Oraacle 99i就是用的的這個(gè)口令。當(dāng)你看到SSQL命令令符時(shí)說(shuō)明已已經(jīng)進(jìn)入到了了Oraclle的命令行行了。圖形版的sqllplus,命命令行的sqqlpluss,還有一個(gè)個(gè)就是通過(guò)網(wǎng)網(wǎng)頁(yè)訪(fǎng)問(wèn)Orracle的的服務(wù),啟動(dòng)動(dòng)sqlpllus,端口口號(hào)是55660,URLL是 HYPERLINK httpp:/1227.0.00.1:55560/issqlpluus。isqqlpl
3、uss httpp:/1227.0.00.1:55560/issqlpluus。isqqlpluss非常有用,比比如說(shuō)你的機(jī)機(jī)器上沒(méi)有裝裝上Oraccle,就可可以通過(guò)鍵入入別人的IPP,然后登陸陸到他的機(jī)器器上來(lái)做實(shí)驗(yàn)驗(yàn),當(dāng)然也可可以安裝特定定的客戶(hù)端軟軟件實(shí)現(xiàn)。說(shuō)實(shí)在的Oraacle的這這個(gè)客戶(hù)端太太難看了,并并且要記好多多好多的命令令,所以專(zhuān)門(mén)門(mén)有一類(lèi)公司司專(zhuān)門(mén)為Orracle開(kāi)開(kāi)發(fā)客戶(hù)端。有一個(gè)比較較著名的客戶(hù)戶(hù)端叫Toad,當(dāng)當(dāng)然Oraccle還有一一個(gè)客戶(hù)端PPL/SQLL Deveelplorr,這個(gè)用的的也非常多。數(shù)據(jù)庫(kù)管理理時(shí)常用Tooad(英文文蛤蟆的意思思),如果有有聲卡
4、的話(huà),你你啟動(dòng)一次它它就叫一次。對(duì)我們來(lái)說(shuō)說(shuō)sqlpllus足夠使使了。以后有有機(jī)會(huì)我使用用一下PL/SQL DDevelpplor,不不過(guò)這個(gè)也不不好使,因?yàn)闉槟阃瑫r(shí)必須須裝上Oraacle,還還不如isqqlpluss好呢。以超級(jí)管理員身身份鏈接數(shù)據(jù)據(jù)庫(kù)的方法是是再命令行下下敲入命令:sqlpllus syys/口令 as syysdba。Sys和syystem的的區(qū)別是syys是數(shù)據(jù)庫(kù)庫(kù)管理者,ssystemm是數(shù)據(jù)庫(kù)所所有者,sys用戶(hù)擁?yè)碛衐ba,sysdbba,sysopper等角色色或權(quán)限,是是oraclle權(quán)限最高高的用戶(hù),ssystemm用戶(hù)擁有dbba,sysdbba等角色
5、或或系統(tǒng)權(quán)限,system如果正常登錄,它其實(shí)就是一個(gè)普通的dba用戶(hù),但是如果以as sysdba登錄,其結(jié)果實(shí)際上它是作為sys用戶(hù)登錄的,這一點(diǎn)類(lèi)似Linux里面的sudo的感覺(jué),從登錄信息里面我們可以看出來(lái)。sys用戶(hù)必須以as sysdba或as sysoper形式登錄。然后輸入命令alter user scott account unlock;它的意思是將Scott用戶(hù)解鎖,以后關(guān)于dba的用到一個(gè)學(xué)一個(gè),沒(méi)必要從頭到尾的去學(xué)它。二SQL語(yǔ)言是在在數(shù)據(jù)庫(kù)下進(jìn)進(jìn)行操作的語(yǔ)語(yǔ)言,它本身身是一個(gè)標(biāo)準(zhǔn)準(zhǔn)語(yǔ)言,有國(guó)國(guó)際標(biāo)準(zhǔn)。有有兩套一個(gè)是是SQL19992,SQQL19999。大多數(shù)數(shù)數(shù)據(jù)庫(kù)
6、既支持持舊的標(biāo)準(zhǔn)也也支持新的,很很多也是用的的舊的SQLL語(yǔ)言寫(xiě)程序序的,對(duì)于我我們來(lái)說(shuō)新舊舊都要學(xué),而而且對(duì)大多數(shù)數(shù)數(shù)據(jù)庫(kù)系統(tǒng)統(tǒng)來(lái)說(shuō)都是通通用的,只不不過(guò)不同數(shù)據(jù)據(jù)庫(kù)有一個(gè)輕輕微的改變,這這就是最郁悶悶的地方,沒(méi)沒(méi)辦法到時(shí)候候查手冊(cè)或ggooglee一下。SQL全稱(chēng)稱(chēng)為Struuctureed Queery Laanguagge,即機(jī)構(gòu)化查查詢(xún)語(yǔ)言,它被定義為為第四代語(yǔ)言言。為什么叫叫第四代語(yǔ)言言,因?yàn)槲覀儌冎赖谌Z(yǔ)言也得有有if ellse foor 等這些些流程控制語(yǔ)語(yǔ)句,也就是是你得告訴它它干什么且怎怎么干。第四四大只用告訴訴它我要干什什么,不用去去控制它怎么么干,這樣的的語(yǔ)言學(xué)
7、起來(lái)來(lái)當(dāng)然十分eeasy。我們共有四類(lèi)類(lèi)語(yǔ)句要學(xué):數(shù)據(jù)操作語(yǔ)語(yǔ)言語(yǔ)句Data manippulatiion laanguagge,DMLL,會(huì)話(huà)控制語(yǔ)語(yǔ)句 HYPERLINK /searchwhatis/18/.shtml sessiion coontroll stattementt,數(shù)據(jù)定義語(yǔ)語(yǔ)言語(yǔ)句DData ddefiniition languuage,DDDL以及及事務(wù)控制語(yǔ)語(yǔ)句 HYPERLINK /searchwhatis/297/.shtml transsactioon conntrol stateement。查詢(xún)語(yǔ)句只有一一句話(huà)就是sselectt語(yǔ)句,這是是最重要的一一條語(yǔ)句
8、。以以后只要遇到到相應(yīng)的seelect語(yǔ)語(yǔ)句一律背過(guò)過(guò),企業(yè)再面面試時(shí)其他語(yǔ)語(yǔ)句一般不會(huì)會(huì)怎么考但這這條語(yǔ)句是必必考的。如果果考你SQLL語(yǔ)句肯定會(huì)會(huì)考這條seelect語(yǔ)語(yǔ)句不是別的的。你跟別人人交流的時(shí)候候,別說(shuō)我寫(xiě)寫(xiě)過(guò)幾條dmml語(yǔ)句,而而因詳細(xì)的說(shuō)說(shuō)到底是什么么語(yǔ)句,比如如inserrt語(yǔ)句、uupdatee語(yǔ)句等。選擇的意思思是從表里把把數(shù)據(jù)拿出來(lái)來(lái),展現(xiàn)出來(lái)來(lái)。聽(tīng)起來(lái)似似乎挺簡(jiǎn)單的的,但你要從從表里拿數(shù)據(jù)據(jù)得首先知道道有幾張表,每每張表里有些些什么內(nèi)容。第一步要做的的就是熟悉一一下實(shí)驗(yàn)用的的數(shù)據(jù),這些些數(shù)據(jù)Oraacle都給給自帶了,直直接用就行了了。首先第一一條語(yǔ)句deesc e
9、mmp,描述一一下emp這這張表,會(huì)分分別列出所有有字段(表頭頭),emppno 雇員員編號(hào),enname 雇雇員名字,jjob 雇員員工種,mggr 經(jīng)理人人,hireedate 雇員入職日日期,sall 薪水,ccomm 津津貼,獎(jiǎng)金,ddeptnoo 所屬部門(mén)門(mén)編號(hào)。表還有一部部分叫類(lèi)型,也也就是相對(duì)應(yīng)應(yīng)字段的類(lèi)型型,這些都是是Oraclle已經(jīng)定義義好的,我們們直接用?,F(xiàn)現(xiàn)在先用別人人建立好的表表,然后再自自己建表。NNUMBERR指數(shù)字,VVARCHAAR指字符型型,Oraccle7以前前在用,現(xiàn)在在常用的是VVARCHAAR2它支持持各種可變字符串,可以更好的的表示各國(guó)文文字,DA
10、TTE指日期,NNUMBERR(7,2)指七位數(shù)字字有兩位小數(shù)數(shù)。desc deept 部門(mén)門(mén)表,它有三三個(gè)字段DEEPTNO 部門(mén)編號(hào),DDNAME 部門(mén)名稱(chēng),LLOC部門(mén)所所在位置。DDesc ssalgraade工資等等級(jí)表,許多多公司都實(shí)行行的是工資等等級(jí)制,分幾幾級(jí)工資,GGRADE工工資等級(jí),HHISAL該該等級(jí)最高工工資,LOSSAL該等級(jí)級(jí)最低工資。以上簡(jiǎn)要的介紹紹了三張表,如如果想更詳細(xì)細(xì)的了解里面面的數(shù)據(jù),教教大家第一個(gè)個(gè)selecct語(yǔ)句:seclectt *frrom 表名名;。*表示把表表里所有的數(shù)數(shù)據(jù)都取出來(lái)來(lái),分號(hào)表示示語(yǔ)句結(jié)束。盡量多熟悉悉各張表之間間的關(guān)系,以
11、以及表內(nèi)部各各字段之間的的關(guān)系,越熟熟悉越好。如果要算純數(shù)據(jù)據(jù),可以采用用dual這這張表,它就就一條記錄,一一個(gè)字段。你你如果用其他他表計(jì)算的話(huà)話(huà)會(huì)有好多條條重復(fù)結(jié)果,記記錄。字段是不能有空空格的,如果果非要空格可可以將整個(gè)字字段用雙引號(hào)號(hào)括起來(lái),這這樣的話(huà)引號(hào)號(hào)里面就可以以加上各種各各樣的字符了了。如果沒(méi)加加引號(hào)的話(huà)那那樣做是不對(duì)對(duì)的。再?zèng)]有有加雙引號(hào)的的時(shí)候結(jié)果字字段名會(huì)以大大寫(xiě)字母顯示示出來(lái),但加加了雙引號(hào)就就保持住了原原來(lái)的形式不不變。沒(méi)有就就是nulll值,即便是是0也與空值值大不一樣。0是有值但但為0,nuull是沒(méi)有有值。任何含含有空值的表表達(dá)式最后的的結(jié)果都是空空值。SQL里
12、面有一一個(gè)字符串鏈鏈接符|,它它的作用跟JJava里的的+一樣,所所有被鏈接的的都會(huì)轉(zhuǎn)換為為字符串顯示示出來(lái)。如selecct enaame|ssal frrom emmp;它的意意思是將結(jié)果果sal轉(zhuǎn)換換為字符串后后鏈接到enname后面面。在任何數(shù)據(jù)據(jù)庫(kù)的SQLL語(yǔ)句里面都都是用單引號(hào)號(hào)括起來(lái)表示示一個(gè)字符串串序列。如果果字符串里本本來(lái)就有單引引號(hào),再解析析時(shí)就會(huì)出錯(cuò)錯(cuò)。可以用兩兩個(gè)單引號(hào)來(lái)來(lái)代替一個(gè)單單引號(hào),這樣樣就可以正確確顯示了。關(guān)鍵字disttinct是是指選擇不重重復(fù)的記錄,如如果修飾多個(gè)個(gè)字段時(shí)表示示選擇該多個(gè)個(gè)字段的組合合不重復(fù)的顯顯示出來(lái)。wwhere叫叫過(guò)濾條件,它它會(huì)過(guò)
13、濾掉一一些記錄,等等值判斷用=,不等值判判斷注意是而不是JJava語(yǔ)句句里的不等號(hào)號(hào)。字符串比較較是比較字符符的ASCIII碼,挨個(gè)個(gè)比較。做比比較時(shí)還可以以用關(guān)鍵字bbetweeen andd,注意的是是包括邊界值值的。andd也可把兩個(gè)個(gè)過(guò)濾條件連連接起來(lái)。下面來(lái)講空值值的處理,你你可以直接用用wheree +字段+is nuull來(lái)取出出是空值的,取取出不是空值值的多加一個(gè)個(gè)not就行行。這種處理理方式非常像像我們的說(shuō)話(huà)話(huà)習(xí)慣。inn然后跟著某某個(gè)字段的取取值是括號(hào)括括起來(lái)各值之之間用逗號(hào)隔隔開(kāi)??梢允故褂胊nd、or,noot連接起各各個(gè)查詢(xún)條件件。日期處理起來(lái)稍稍微麻煩一些些,由于現(xiàn)
14、在在還沒(méi)有學(xué)日日期函數(shù),所所以采用另外外一種方式一個(gè)特殊的的字符串。你你就按它的日日期寫(xiě)法來(lái)寫(xiě)寫(xiě)如20-2月月-07,然后系統(tǒng)統(tǒng)就按照字符符串來(lái)比較即即可。年份可可以寫(xiě)全如20-2月月-2007,它能認(rèn)出出來(lái)。以后我我們可以寫(xiě)成成任何形式的的日期格式都都能處理。模糊查詢(xún)是這樣樣的,比如找找出名字里含含有al的,有有點(diǎn)像正則表表達(dá)式。使用用關(guān)鍵字liike,可以以通配符%,代代表0個(gè)或多多個(gè)字符,_代表一個(gè)字字母。如果名字里里就含有一個(gè)個(gè)%,則使用用轉(zhuǎn)義字符%的形式,當(dāng)當(dāng)然可以自己己指定轉(zhuǎn)義字字符方法是sselectt * frrom emmp wheere enname llike _A$%
15、esccape $;。排序用到的一個(gè)個(gè)關(guān)鍵字是oorder by,默認(rèn)認(rèn)的是按升序序排列,如果果想降序排列列可以采用如如下形式:sselectt * frrom deept orrder bby depptno ddesc;ddesc是降降序的英文縮縮寫(xiě)。升序排排列可不寫(xiě)也也可加上assc。還可以以加入wheere先過(guò)濾濾了再排序,按照幾個(gè)字段進(jìn)行排序時(shí),用逗號(hào)分隔開(kāi),如下:select ename ,job,empno,sal ,deptno from emp order by deptno,sal desc;意思是先將表按照deptno升序排列,然后相同的deptno內(nèi)部再按照sal降序排
16、列。三SQL函數(shù),函函數(shù)就是Jaava里的方方法,有參數(shù)數(shù)有返回值?,F(xiàn)在講的是是單行函數(shù),第第一個(gè)叫做llower,作作用是轉(zhuǎn)換為為小寫(xiě);第二二個(gè)叫uppper,作用用是轉(zhuǎn)為大寫(xiě)寫(xiě);第三個(gè)叫叫substtring,取取子串。這幾幾個(gè)函數(shù)都是是對(duì)字符串進(jìn)進(jìn)行操作的,傳傳遞進(jìn)去的參參數(shù)就是字段段名。如selecct lowwer(enname) from emp;還還有一個(gè)函數(shù)數(shù)叫chr,它它是把一個(gè)數(shù)數(shù)字轉(zhuǎn)為字符符:seleect chhr(86) fromm duall;將86代代表的字符顯顯示出來(lái),與與之對(duì)應(yīng)的是是將一個(gè)字符符轉(zhuǎn)為對(duì)應(yīng)的的ASCIII碼,叫asscii,如如:seleect
17、asscii(A) froom duaal;就是將將A的碼值顯顯示出來(lái)。round函數(shù)數(shù)是四舍五入入的作用,如如selecct rouund(433.) frrom duual;結(jié)果果就為44。還有一個(gè)重重載的帶兩個(gè)個(gè)參數(shù)的方法法如seleect roound(443.,4) fromm duall;四舍五入入到小數(shù)點(diǎn)后后4位,結(jié)果果位44.55354,第第二個(gè)參數(shù)可可以是負(fù)數(shù)表表示四舍五入入到小數(shù)點(diǎn)前前多少位。其他函數(shù)可以不不用記住,但但要知道有這這么個(gè)函數(shù),然然后取手冊(cè)中中可以查到,但但下面講的一一個(gè)函數(shù)最好好記住它。tto_chaar是將字段段內(nèi)容顯示為為字符,可以以對(duì)顯示的形形式進(jìn)行格
18、式式控制,比如如selecct to_char(sal, $99,999,9999.99999) from emp;就就是以后面給給定字符形式式顯示出來(lái),小小數(shù)點(diǎn)后的四四位會(huì)強(qiáng)制顯顯示,而前面面的沒(méi)有的位位數(shù)就不顯示示,這就是99的含義。$換為L(zhǎng)表示示本地貨幣。0代表一位位數(shù)字,如果果沒(méi)有該位數(shù)數(shù)字也會(huì)強(qiáng)制制顯示為0,對(duì)于這種方式是為了進(jìn)行格式控制。實(shí)際上用too_charr來(lái)控制數(shù)字字是比較少用用的,而用得得最多的是對(duì)對(duì)日期格式的的控制,我們們知道Oraacle里的的sysdaate包含了了插入記錄的的詳細(xì)時(shí)間信信息,我們可可以對(duì)其進(jìn)行行顯示的格式式進(jìn)行控制,比比如:sellect tto_
19、chaar(hirredatee,yyyyy-mm-dd) from emp;轉(zhuǎn)轉(zhuǎn)換為年月日日2006-3-23這這種格式的。實(shí)際上對(duì)日日期的格式控控制是利用JJava來(lái)實(shí)實(shí)現(xiàn)的,到時(shí)時(shí)會(huì)有一個(gè)關(guān)關(guān)于日期處理理的專(zhuān)題。select enamee,job,hireddate ffrom eemp whhere hhiredaate tto_datte(19982-1-1 1:330:00, yyyyy-mmm-dd hhh:mi:ss);意思是將特特定的字符串串轉(zhuǎn)換為相應(yīng)應(yīng)的日期格式式。還有to_numbeer是將特定定的字符串解析為為相應(yīng)的數(shù)字格格式如selecct enaame ,jjob
20、,ssal frrom emmp wheere saal22000;首首先按depptno求出出每個(gè)depptno的平平均sal,然然后對(duì)這些分分組利用haaving 語(yǔ)句進(jìn)行過(guò)過(guò)濾。到現(xiàn)在為止已已經(jīng)學(xué)完了所所有的單條sselectt語(yǔ)句,執(zhí)行行順序按照sselectt+字段或內(nèi)容+frrom+表名名+wherre+grouup by+haviing+ordeer by這個(gè)順序進(jìn)進(jìn)行執(zhí)行,首首先取出記錄錄,然后對(duì)單單個(gè)記錄進(jìn)行行過(guò)濾,過(guò)濾濾完了分組,分分組好了對(duì)組組過(guò)濾,剩下下的分組再按按順序顯示出出來(lái)。單條sselectt語(yǔ)句一定要要非常熟悉,如如果這都要查查書(shū)的話(huà)對(duì)企企業(yè)就沒(méi)法交交代了,哈
21、哈哈!之前已經(jīng)講過(guò)一一個(gè)子查詢(xún)的的例子:seelect enamee,sal from emp wwhere sal=(selecct maxx(sal) fromm emp);看誰(shuí)的工工資最高,之之所以叫子查查詢(xún)因?yàn)樵僖灰粋€(gè)seleect語(yǔ)句里里套了另外一一個(gè)seleect語(yǔ)句。理解子查詢(xún)?cè)兊年P(guān)鍵是把把它當(dāng)成一張張表,可以對(duì)對(duì)它做表連接接最后就可以以求出想要的的結(jié)果來(lái)。單單獨(dú)的sellect語(yǔ)句句相當(dāng)簡(jiǎn)單,但但是有了seelect子子句和表連接接之后語(yǔ)句就就稍微復(fù)雜了了點(diǎn)。sellect eename ,sal from emp jjoin(sselectt max(sal) max_ssa
22、l,deeptno from emp ggroup by deeptno) t onn (empp.sal=t.maxx_sal and tt.depttno=emmp.depptno);這個(gè)語(yǔ)句的的作用是求出出每個(gè)部門(mén)薪薪水最高的員員工記錄。select e1.enname,ee2.enaame frrom emmp e1,emp ee2 wheere e11.mgr=e2.emmpno;對(duì)對(duì)于在同一張張表中進(jìn)行查查詢(xún)時(shí)需要進(jìn)進(jìn)行自連接,為為表取別名便便于寫(xiě)出條件件和比較。這這條語(yǔ)句的意意思是找出每每個(gè)員工的經(jīng)經(jīng)理人。為同同一張表起不不同的別名然然后當(dāng)成兩張張表來(lái)用。在SQL99里里面鏈接條
23、件件和過(guò)濾條件件是分開(kāi)的,即即鏈接條件不能能出現(xiàn)在whhere語(yǔ)句句里面,利用用Join+表名+onn+鏈接條件件進(jìn)行。比如如:seleect enname ,job,ddname from emp jjoin ddept oon (emmp.depptno=ddept.ddeptnoo);等值鏈鏈接的時(shí)候有有一個(gè)簡(jiǎn)便的的寫(xiě)法usiing(deeptno)代替on (emp.deptnno=deppt.depptno)但但不推薦使用用,因它的限限制條件很多多,可能報(bào)出出來(lái)的錯(cuò)誤很很難找并且看看起來(lái)也不是是很清楚。連接有各種各樣樣的形式,下下面我們講外外連接,其實(shí)實(shí)用起來(lái)特別別方便。它會(huì)把左邊邊
24、那張表不能能和右邊鏈接接的數(shù)據(jù)也拿拿出來(lái)。seelect t1.enname , t2.eename mgr , t1.ddeptnoo fromm emp t1 left ouuter jjoin eemp t22 on (t1.mggr=t2.empnoo);outter可以省省略掉效果一一樣。如果想想把右邊多余余的拿出來(lái)JJoin前加加上righht即可;如如果兩邊多余余的都想拿出出來(lái)Joinn前加上fuull叫全外外連接。講一道面試題,不不準(zhǔn)用組函數(shù)數(shù)求出薪水的最最高值。方法法是用自連接接,連接條件件采用非等值值連接,這這樣表中的最最大值就會(huì)連連接不上,然然后再?gòu)膃mmp表中找出出未連
25、接上的的最大值,如如下:sellect ssal frrom emmpwherre sall not in (sselectt t1.ssal frrom emmp t1jjoin eemp t22on (tt1.sall(sselectt max(sal) from emp wwhere empnoo not in (sselectt disttinct mgr ffrom eemp whhere mmgr iss not null) andd empnno in (seleect diistincct mgrr fromm emp wheree mgr is noot nulll );再講
26、一道面試題題:比較這兩兩個(gè)語(yǔ)句的執(zhí)執(zhí)行效率Select * froom empp wherre depptno=110 andd enamme likke %A%;Select * froom empp wherre enaame liike %A%anddepptno=110;理論上說(shuō)應(yīng)該是是第一個(gè),就就如同&和和&的區(qū)別一一樣它會(huì)過(guò)濾濾掉很多條件件,后面的字字符串就不用用再取去比較較了,但實(shí)際際中不好說(shuō)因因?yàn)橛锌赡躉Oraclee在執(zhí)行的時(shí)時(shí)候做了優(yōu)化化,自動(dòng)將數(shù)數(shù)字比較放前前面了。四現(xiàn)在已經(jīng)講完完了seleect語(yǔ)句,接接下來(lái)講dmml語(yǔ)句,常常見(jiàn)的有三條條,他們和sselectt語(yǔ)句合
27、稱(chēng)為為數(shù)據(jù)庫(kù)的四四大語(yǔ)句(sselectt/inseert/uppdate/delette)。增刪改查!接下來(lái)簡(jiǎn)單介紹紹一下Oraacle的邏邏輯結(jié)構(gòu)。安安裝的時(shí)候創(chuàng)創(chuàng)建了一個(gè)全全局?jǐn)?shù)據(jù)庫(kù),同同時(shí)為這個(gè)數(shù)數(shù)據(jù)庫(kù)建立了了一系列管理理它的進(jìn)程SSID。一個(gè)大數(shù)據(jù)據(jù)庫(kù)里面又區(qū)區(qū)分為不同的表空空間,說(shuō)白了了就是裝表的的地兒。我們們現(xiàn)在的表是是放在不同的的表空間里面面,比方說(shuō)uusers表表空間,在里里面放著某個(gè)個(gè)用戶(hù)所有的的表,當(dāng)該用用戶(hù)登錄進(jìn)去去后其實(shí)是去去訪(fǎng)問(wèn)自己的的表空間里的的相對(duì)應(yīng)的表表??梢詫⒛衬硞€(gè)表空間里里的內(nèi)容全部部copy出出去創(chuàng)建一個(gè)個(gè)新的useer,然后該該user就就操作專(zhuān)屬于于
28、自己的表空空間里的表了了,所以說(shuō)OOraclee是支持多用用戶(hù)的。將某個(gè)表空間里里的內(nèi)容全部部copy出出去創(chuàng)建一個(gè)個(gè)新的useer做法是這這樣的:1.以超級(jí)管理理員登錄數(shù)據(jù)據(jù)庫(kù)connn sys/oraclle as sysdbba;2.從命令行行在起一個(gè)cclientt,先建立一一個(gè)目錄如CC:tesst進(jìn)入該目目錄后執(zhí)行ddel *.*刪除所有有,然后鍵入入命令expp后提示輸入入用戶(hù)名和口口令,就是你你要備份哪個(gè)個(gè)就輸哪個(gè),接接下來(lái)提示輸輸入數(shù)組提取取緩沖區(qū)大小小,這個(gè)沒(méi)關(guān)關(guān)系(內(nèi)存里里的一個(gè)小區(qū)區(qū)域填滿(mǎn)了再再統(tǒng)一拿到硬硬盤(pán)上來(lái))一一路回車(chē)就行行,等著它導(dǎo)導(dǎo)完就可以了了;3.創(chuàng)建新用用
29、戶(hù)creaate usser huuanggaang iddentiffied bby hahha08322 defaault ttablesspace userss quotta 10MM on uusers;用戶(hù)名huuanggaang口令hhaha08832在ussers表空空間里分配110M的默認(rèn)認(rèn)表空間給該該用戶(hù);4.給予相應(yīng)應(yīng)權(quán)限graant crreate sessiion,crreate tablee,creaate viiew too huannggangg,如果沒(méi)有有sessiion它登錄錄都是問(wèn)題;5.導(dǎo)入文文件imp后后回車(chē)幾個(gè)后后提示是否導(dǎo)導(dǎo)入整個(gè)導(dǎo)出出文件選否后后輸
30、入想導(dǎo)入入的那個(gè)用戶(hù)戶(hù)數(shù)據(jù)的用戶(hù)戶(hù)名。只有2和55是在命令行行中完成,其其余是超級(jí)用用戶(hù)登錄后在在數(shù)據(jù)庫(kù)里完完成。insert into+表名+vaalues(各各字段值),在在對(duì)這些數(shù)據(jù)據(jù)進(jìn)行操作時(shí)時(shí)最好有一個(gè)個(gè)備份,方法法很簡(jiǎn)單roollbacck回退操作作,creaate taable 表表名 as selecct * ffrom +欲備份表名名;inserrt語(yǔ)句還有有一種插入方方法,inssert iinto ddept2(deptnno,locc) vallues(550,beeijingg);只是是插入部分字字段的值,其其他字段的值值為nulll,還有一種種方法是innsert
31、into dept22 seleect * from dept;將seleect子句選選出的記錄挨挨個(gè)插入前提提是選出的記記錄與該表的的記錄格式相相同。在Oraclee中取完相應(yīng)應(yīng)字段后,會(huì)會(huì)在末尾附加加一個(gè)偽字段段,你看不到到,叫做roownum,它它是記錄下每每條記錄在第第幾行了,用用它的時(shí)候有有個(gè)限制條件件只能與或或=6 aand r=10;這個(gè)在Oraccle里面是是效率最高的的,如果通過(guò)過(guò)連接數(shù)據(jù)庫(kù)庫(kù)用Javaa編程來(lái)做,但但效率相當(dāng)?shù)偷?。這個(gè)重點(diǎn)點(diǎn)掌握,比如如說(shuō)顯示論壇壇里的帖子是是分頁(yè)顯示的的,如果想顯顯示第4頁(yè)的的內(nèi)容一定是是從某一個(gè)帖帖子到某一個(gè)個(gè)帖子顯示出出來(lái),帖子這這個(gè)記
32、錄是按按照發(fā)帖時(shí)間間倒序排列的的。三層嵌套套就是Oraacle對(duì)這這種問(wèn)題的解解決方案,當(dāng)當(dāng)然每一種數(shù)數(shù)據(jù)庫(kù)有自己己的解決方式式。SQL面試題:有3個(gè)表S,CC,SC。SS(SNO,SNAMEE)代表(學(xué)學(xué)號(hào),姓名);C(CNOO,CNAMME,CTEEACHERR)代表(課課號(hào),課名,教教師);SCC(SNO,CNO,SSCGRADDE)代表(學(xué)學(xué)號(hào),課程成成績(jī))。問(wèn)題:找出沒(méi)選過(guò)“黎黎明”老師課程的的所有學(xué)生姓姓名;列出2門(mén)以上(含含2門(mén))不及及格學(xué)生姓名名及平均成績(jī)績(jī);既學(xué)過(guò)1號(hào)課程程又學(xué)過(guò)2號(hào)號(hào)課程所有學(xué)學(xué)生姓名。請(qǐng)用標(biāo)準(zhǔn)SQLL語(yǔ)言寫(xiě)出答答案,方言也也行(請(qǐng)說(shuō)明明使用什么方方言)。s
33、elect snamee fromm s jooin scc on (s.snoo=sc.ssno) jjoin cc on (o=sc.noo) wheere c.cteaccher limingg; (2) seleect snname ffrom ss wherre snoo in (selecct snoo fromm sc wwhere scgraade =2); (3) seleect snname ffrom ss wherre snoo in (selecct snoo fromm sc wwhere cno=11 and sno = (sellect ssno frrom s
34、cc wherre cnoo=2);update 的作用相對(duì)對(duì)于對(duì)記錄進(jìn)進(jìn)行修改。用用法是upddate+表表名+sett+字段列表表及更新值過(guò)過(guò)濾條件;deelete+from+表名+過(guò)濾濾條件,刪除除某些字段。五接下來(lái)講數(shù)據(jù)據(jù)定義語(yǔ)言dddl語(yǔ)言。它實(shí)現(xiàn)了數(shù)數(shù)據(jù)表,視圖圖等的建立。事務(wù)trannsactiion就是一一系列的操作作,要么同時(shí)時(shí)完成要么不不完成,比如如轉(zhuǎn)賬操作要要對(duì)兩個(gè)賬戶(hù)戶(hù)updatte,不會(huì)出出現(xiàn)數(shù)據(jù)不一一致。對(duì)于OOraclee來(lái)說(shuō),一個(gè)個(gè)transscatioon起始于一一條dml語(yǔ)語(yǔ)句,然后一一系列的操作作rollbback回退退事務(wù)會(huì)結(jié)束;或commmit結(jié)束事事
35、務(wù),再roollbacck也沒(méi)用;當(dāng)遇到一條條dcl語(yǔ)句句或ddl語(yǔ)語(yǔ)句提交結(jié)束束事務(wù);當(dāng)正正常退出exxit時(shí)提交交結(jié)束事務(wù),不不正常退出時(shí)時(shí)(如斷電)自自動(dòng)回滾結(jié)束束事務(wù)。數(shù)據(jù)庫(kù)常用對(duì)象象是指它經(jīng)常常使用的一些些資源,比方方說(shuō)表、視圖圖或其他資源源。下面講如如何創(chuàng)建一張張表,creeate ttable +表名+字字段及字段的的數(shù)據(jù)類(lèi)型。Oraclle常用的數(shù)數(shù)據(jù)類(lèi)型有變長(zhǎng)字符串串varchhar2(最最長(zhǎng)字符數(shù)即即上界4k)、定長(zhǎng)字符串串char(所所占大?。?。有了變長(zhǎng)字字符串后為什什么還要有定定長(zhǎng)字符串呢呢?主要還是是效率問(wèn)題,跟跟數(shù)組很像,但但是站空間,很很多結(jié)構(gòu)、算算法都存在拿拿空
36、間換時(shí)間間問(wèn)題,如HHashTaable。數(shù)字型nuumber(mm,n)m指指總共多少為為,n是小數(shù)數(shù)點(diǎn)后的位數(shù)數(shù);日期daate,包含含年月日時(shí)分分秒;變長(zhǎng)字符串串long可可達(dá)2G,主主要是有些時(shí)時(shí)候一篇文本本相當(dāng)長(zhǎng);存存圖片可以把把硬盤(pán)上圖像像的名字存到到數(shù)據(jù)庫(kù)里,也也可以把整張張圖片存到數(shù)數(shù)據(jù)庫(kù)里。創(chuàng)建一張表存放放學(xué)生數(shù)據(jù)如如:create tablee stu ( id nummber(88), name vvarchaar(20), sex nuumber(10), age nuumber(3), sdate date, grade numbeer(2) defauult 1,
37、class numbeer(2), email varchhar2(550) );sex取數(shù)字來(lái)來(lái)表示更節(jié)省省空間,入學(xué)學(xué)時(shí)日期加個(gè)個(gè)s避免和關(guān)關(guān)鍵字沖突,可可以為某些字字段指定默認(rèn)認(rèn)值當(dāng)插入記記錄時(shí)沒(méi)有對(duì)對(duì)該字段賦新新值就以該默默認(rèn)值,其他他沒(méi)有默認(rèn)值值為nulll。五個(gè)約束條件件第一個(gè)叫非非空,第二個(gè)個(gè)叫唯一,第第三個(gè)叫主鍵鍵,第四個(gè)叫叫外鍵第五個(gè)個(gè)叫checck。當(dāng)我們們創(chuàng)建這張表表的時(shí)候,有有一個(gè)最簡(jiǎn)單單的條件字段段非空nott nulll。在Oraacle里面面約束條件也也可以看成一一個(gè)對(duì)象,能能為之取一個(gè)個(gè)名字,加一一個(gè)關(guān)鍵字cconstrraint+約束名,如如name varc
38、hhar(2) consstrainnt stuu_namee_nn nnot nuull,不起時(shí)系統(tǒng)統(tǒng)自動(dòng)起名字字我們不用管管了。唯一約約束的意思是是在這個(gè)字段段里面所有的的記錄不能重重復(fù),如id nnumberr(8) uuniquee,這屬于字段段級(jí)的約束;字段級(jí)的約約束有些限制制,比如要某某些字段組合合不能重復(fù),還有就是兩個(gè)空值它不認(rèn)為是重復(fù)的。要達(dá)到表級(jí)約束方法是在最后一個(gè)字段寫(xiě)完后加一句如:constraint stu_name_email_uniunique(emaill,namee)。主鍵(primmary kkey)是可可以唯一標(biāo)示示整條記錄的的東西,它代表表的意思是既既不能
39、為空又又不能重復(fù),比如學(xué)生學(xué)號(hào)。E-mail做主鍵不好因?yàn)樗梢詾閚ull,同時(shí)索引的時(shí)候數(shù)字比字符串效率高。如id number(8) primary key,也可以加在表級(jí),如constraint stu_id_pk primary key(id),主鍵也可以是多個(gè)字段組合。外鍵約束建立立在一張表的的兩個(gè)字段上上或者是兩張張表的兩個(gè)字字段上,是比比較麻煩的一一種約束。在在emp和ddept就有有外鍵約束,往emp里加記錄的時(shí)候不允許再dept里沒(méi)有的部門(mén)編號(hào)。class number(2) references class(id),參考class這張表的id字段,當(dāng)然也可以加在表級(jí)上:co
40、nstraint foreign key (class) references class(id),。注意在寫(xiě)外鍵約束的時(shí)候,stu里的class叫參考字段,class里的id叫被參考字段,加外鍵的前提是被參考字段必須是主鍵。刪一條記錄的時(shí)候首先看有沒(méi)有其他字段參考它,有的話(huà)是無(wú)法刪除的,違反了完整約束條件。Check約束束用得比較少少,在寫(xiě)miis系統(tǒng)時(shí)數(shù)數(shù)據(jù)在Javva程序里就就已經(jīng)校驗(yàn)過(guò)過(guò)了。修改表表結(jié)構(gòu)是在現(xiàn)現(xiàn)有表上修改改。在任何項(xiàng)項(xiàng)目開(kāi)發(fā)時(shí)候候建表的SQQL語(yǔ)句是要要保存下來(lái)的的,所以可以以將表整個(gè)刪刪掉再建。添添加字段allter ttable +表名+aadd(字段段名+數(shù)據(jù)類(lèi)類(lèi)
41、型)如allter ttable dept22 add(dphonne varrchar22(11);刪除某個(gè)個(gè)字段如allter ttable dept22 dropp(dphoone);還還可以修改字字段的數(shù)據(jù)類(lèi)類(lèi)型,如果里里面已經(jīng)有數(shù)數(shù)據(jù)修改的后后果應(yīng)不影響響原來(lái)存的記記錄值。在Oraclee里面看當(dāng)前前用戶(hù)下有哪哪些表,哪些些約束,哪些些視圖等等這這些信息被單單獨(dú)地裝在一一張表里面,稱(chēng)作數(shù)據(jù)字典表。user_tables里面裝的是當(dāng)前用戶(hù)共有多少?gòu)埍?,里面字段可多了,我們關(guān)心的是table_name。查詢(xún)當(dāng)前用戶(hù)下有哪些視圖:select view_name from user_vie
42、ws;查詢(xún)當(dāng)前用戶(hù)下有哪些表:select table_name from user_tables;查詢(xún)當(dāng)前用戶(hù)下有哪些約束:select constraint_name,table_name from user_constraints;。user_tables、user_constraints、user_views這些都是數(shù)據(jù)字典表,那么一共有多少個(gè)數(shù)據(jù)字典表呢?Oracle專(zhuān)門(mén)有另外一張表存放數(shù)據(jù)字典表的表叫做dictionary,它總共兩個(gè)字段一個(gè)叫table_name數(shù)據(jù)字典表的名字、還有一個(gè)叫comments對(duì)于這張數(shù)據(jù)字典表的描述??偣灿?00多個(gè)數(shù)據(jù)字典表,這就是Oracle的D
43、BA總是背著個(gè)小本本的原因,你要背是不可能的。索引就相當(dāng)于字字典里的索引引一樣,它在在Oraclle里相當(dāng)于于一種新的數(shù)數(shù)據(jù)庫(kù)對(duì)象,建立索引的方法create index idx_stu_emil on stu (email);也可以在字段組合上建立索引,以后在查詢(xún)組合時(shí)效率就高,刪除索引同刪除表方法類(lèi)似。忘了自己有哪些索引可以采用select index_name from user_indexse;當(dāng)你給某張表的字段加主鍵或唯一性約束的時(shí)候。建立索引的用處是當(dāng)你建立了索引后取訪(fǎng)問(wèn)相應(yīng)數(shù)據(jù)的時(shí)候效率會(huì)很高。注意說(shuō)的是讀的效率高了,但存的效率反而低了,因?yàn)槟愕猛瑫r(shí)往索引表里加索引值,會(huì)占用大量
44、的空間。記住一點(diǎn)不要輕易建立索引,除非覺(jué)得訪(fǎng)問(wèn)量特別大時(shí)。視圖前面也提提過(guò),它是一一張?zhí)摫恚瑖?yán)嚴(yán)格來(lái)講就是是一個(gè)子查詢(xún)?cè)?。利用它可可以?jiǎn)化我們們的查詢(xún)復(fù)雜雜度,同時(shí)它它也有不好的的地方,就是是表結(jié)構(gòu)改了了它也得跟著著改動(dòng),增加加了維護(hù)的難難度。視圖有有些其他功能能,比如說(shuō)我我有一個(gè)數(shù)據(jù)據(jù)庫(kù),它里面面存了所有的的產(chǎn)品信息,而有一個(gè)供應(yīng)商他想看我產(chǎn)品的信息,如果我把整張表都給他看那么關(guān)鍵信息他就全部都看走了,我的銷(xiāo)量有多少等等。我可以建立一個(gè)視圖里面只包含我想要給他看的內(nèi)容。序列是Oraacle數(shù)據(jù)據(jù)庫(kù)獨(dú)有的東東西,它產(chǎn)生生一個(gè)唯一、不間斷的序序列,作用是是一般做主鍵鍵。如下我們們要存儲(chǔ)BBBS里
45、的帖子子建立一張表表:create tablee artiicle (id numbber,title vvarchaar2(10024),cont loong);如果要加入一篇篇文章,采用用這種做法sselectt max(id) ffrom aarticlle;然后知知道了id往往里插,但若若有另外一個(gè)個(gè)客戶(hù)端在做做數(shù)據(jù)插入同同時(shí)也在執(zhí)行行完上面一條條語(yǔ)句插入了了一條記錄就就會(huì)導(dǎo)致數(shù)據(jù)據(jù)不一致的現(xiàn)現(xiàn)象。為此我我們可以創(chuàng)建建一個(gè)seqquencee,每次插的的時(shí)候訪(fǎng)問(wèn)它它的一個(gè)屬性性nextvval就會(huì)得得到不重復(fù)的的id,實(shí)際際上它是在內(nèi)內(nèi)部做了同步步的。六范式就是數(shù)據(jù)庫(kù)庫(kù)設(shè)計(jì)的一些些規(guī)則
46、,而它它又是由一個(gè)個(gè)姓范的提出的。講到設(shè)計(jì)其其實(shí)是很復(fù)雜雜的事情,不不能指望用幾幾條規(guī)則把所所有的都總結(jié)結(jié)出來(lái)(你在在造永動(dòng)機(jī),追追求銀彈siilver bulleet),所以有時(shí)要要具體問(wèn)題具具體分析,該該打破三范式式的時(shí)候還是是要敢于打破破。三范式追求的的是這樣的目目標(biāo):不存在在冗余數(shù)據(jù),換換句話(huà)說(shuō)就是是同樣的數(shù)據(jù)據(jù)不存第二遍遍。當(dāng)然除了冗冗余性外還有有一些邊緣性性的要求,不不是很重要,講到的時(shí)候再說(shuō)。第一范式的第第一個(gè)要求-要有主鍵;第二個(gè)要求求-列不可分分,不能說(shuō)姓姓名我還要分分成姓和名。第二范式當(dāng)一一張表里有多多個(gè)字段作為為組合主鍵的的時(shí)候,非主主鍵的字段不不能夠依賴(lài)于于部分主鍵,多
47、對(duì)多關(guān)系的表應(yīng)分割成三張表,如前一個(gè)面試題。第三范式是不不能存在傳遞遞依賴(lài),即除除了主鍵之外外的其他字段段必須直接依依賴(lài)于主鍵。比如empp表里的deeptno依賴(lài)于emppno,而lloc依賴(lài)于于empnoo所以不能放放一張表里。七PL_SQL是是Oraclle里面的一一個(gè)編程語(yǔ)言言,比較有用用,在Oraacle內(nèi)部部寫(xiě)一些存儲(chǔ)儲(chǔ)過(guò)程,觸發(fā)發(fā)器,函數(shù)?;旧厦恳灰环N數(shù)據(jù)庫(kù)都都有這么一個(gè)個(gè)語(yǔ)言,SQQL-Serrver叫做做T_SQLL,如果每個(gè)個(gè)都學(xué)比較累累,但是可以以取學(xué)一種然然后其他實(shí)在在要用時(shí)再查查上手要快很很多。可能以以后我們接觸觸的寫(xiě)存儲(chǔ)過(guò)過(guò)程機(jī)會(huì)很少少,實(shí)際上我我們用SQLL和J
48、avaa程序就可以以解決大部分分問(wèn)題了,這這只是讓大家家有個(gè)了解知知道有這么回回事。PL語(yǔ)言用來(lái)補(bǔ)補(bǔ)充SQL語(yǔ)語(yǔ)言的,因?yàn)闉楹笳卟粠в杏蟹种Ш脱h(huán)環(huán),對(duì)于有些些問(wèn)題求解不不便,而過(guò)程程語(yǔ)言可以解解決。PL_SQQL寫(xiě)程序非非常固定,分分為四塊,第第一塊叫deeclaree,聲明各種種變量和游標(biāo)標(biāo)的地方,可可選;第二個(gè)個(gè)叫begiin,就是說(shuō)說(shuō)程序從這開(kāi)開(kāi)始執(zhí)行了;excepption是是catchh到任何異常常時(shí)要執(zhí)行的的;end是是結(jié)束,后面面得有一個(gè)分分號(hào)。set serrverouutput on;begin dbms_ooutputt.put_line(hi,ppl_sqll!);en
49、d;/第一句是將內(nèi)部部環(huán)境變量打打開(kāi),默認(rèn)的的是關(guān)掉的,不不然看不到任任何輸出結(jié)果果。dbmss_outpput相當(dāng)于于systeem.outt而put_line相相當(dāng)于priintln。declaree v_namme varrchar22(20);begin v_namme := huannggangg; dbms_outpuut.putt_linee(v_naame);end;/變量名的寫(xiě)法是是v_+名字字,聲明的時(shí)時(shí)候是變量名名在前,類(lèi)型型在后;賦值值語(yǔ)句有點(diǎn)像像pascaal冒號(hào)等號(hào)號(hào);declaree v_naame nuumber := 0; begin v_naame := 2
50、/v_name; dbmss_outpput.puut_linne(v_nname); excepttion whenn otheers thhen dbbms_ouutput.put_lline(Errorr!); end; /當(dāng)檢測(cè)到異常時(shí)時(shí)才執(zhí)行exxceptiion,whhen otthers then 這樣做就相相當(dāng)于一張大大網(wǎng)子,肯定定能把異常捕捕獲到。PL_SQLL變量聲明規(guī)規(guī)則:變量名名不能夠使用用保留字(OOraclee里保留字很很多所以推薦薦使用v_+名字,這樣樣不易沖突),如select、from等;第一個(gè)字符必須是字母;變量名最多包含30個(gè)字符;不要與數(shù)據(jù)庫(kù)的表或者列同
51、名;每一行只能聲明一個(gè)變量。常用變量類(lèi)型7種:binary_integer整數(shù)主要是計(jì)數(shù)而不是用來(lái)表示字段類(lèi)型(用來(lái)for循環(huán),數(shù)組下標(biāo),效率比較高,Oracle追求的目標(biāo));number數(shù)字類(lèi)型;char定長(zhǎng)字符串;date日期;long長(zhǎng)字符串可達(dá)2GB;boolean布爾可取true、false或null值,建議大家布爾類(lèi)型在用的時(shí)候一定要給一個(gè)初值,否則是null。declaree v_teemp nuumber(1); v_coount bbinaryy_inteeger :=0; v_sal numbeer(7,22) := 4000.00; v_datee datee := ss
52、ysdatte; v_pi cconstaant nuumber := 3.14; v_valiid booolean := faalse; v_namee varcchar2(20) nnot nuull :=myNaame; begin dbmss_outpput.puut_linne(v_temp valuee:|vv_datee); end; /dbms_ouutput.put_lline不能能打印處布爾爾類(lèi)型的值。Constaant相當(dāng)于于Java的的finall ,nott nulll對(duì)變量進(jìn)行行限制。Oracle里里面的變量經(jīng)經(jīng)常用來(lái)存儲(chǔ)儲(chǔ)某一張表的的某個(gè)字段的的值,使用%typ
53、e屬屬性為了解決決表里字段的的變動(dòng)與聲明明變量類(lèi)型一一致。在PLL_SQL里里面可以使用用 兩個(gè)短橫橫線(xiàn)注釋掉一一行,注釋掉掉多行的時(shí)候候用/* */。declaree v_emmpno nnumberr(4);v_empnoo2 empp.empnno%typpe; v_emmpno3 v_emppno2%ttype; begin dbmss_outpput.puut_linne(Teest); end;%type可以以看做變量的的一個(gè)屬性,指指示其類(lèi)型;引用某張表表某個(gè)字段方方法如v_eempno22 emp.empnoo%typee;。下面接著講PPL_SQLL里面復(fù)雜的的變量,可以以定
54、義復(fù)合變變量,有兩種種:Tablle相當(dāng)于JJava里的的數(shù)組;Reecord相相當(dāng)于Javva里的類(lèi),暫暫且這樣理解解。要指定ttable的的數(shù)據(jù)類(lèi)型,比比較復(fù)雜是這這樣來(lái)做type type_tablee_emp_empnoo is ttable of emmp.emppno%tyype inndex bby binnary_iintegeer;typpe定義了一一種新的數(shù)據(jù)據(jù)類(lèi)型名字叫叫type_tablee_emp_empnoo,然后可以以用它定義新新變量如 vv_empnnos tyype_taable_eemp_emmpno;。比較有意思思的是下標(biāo)可可以取負(fù)值如如v_emppnos
55、(-1)。是什么促使了rrecordd類(lèi)型數(shù)據(jù)的的出現(xiàn)呢?我我們現(xiàn)在寫(xiě)的的是PL_SSQL,它最最主要用于操操縱表,表里里面有字段、記錄,如果果把一條記錄錄放一個(gè)變量量里以后用起起來(lái)要方便得得多。聲明這這種類(lèi)型的方方式如:declaree type type_recorrd_deppt is recorrd( depttno deept.deeptno%type, dnamme deppt.dnaame%tyype, loc dept.loc%ttype); v_temmp typpe_reccord_ddept;begin v_temmp.depptno := 50; v_temmp.dna
56、ame := aaaaa; v_temmp.locc := bj; dbms_outpuut.putt_linee(v_teemp.deeptno| | v_ttemp.ddname);end;/這樣聲明還有一一個(gè)弊病,那那就是當(dāng)字段段改變時(shí)控制制起來(lái)比較煩煩人,為此引引入rowttype屬性性來(lái)聲明reecord變變量。只需:declaree v_temmp deppt%rowwtype;begin v_temmp.depptno := 50; v_temmp.dnaame := aaaaa; v_temmp.locc := bj; dbms_outpuut.putt_linee(v_tee
57、mp.deeptno| | v_ttemp.ddname);end;/PL_SQL語(yǔ)語(yǔ)句里的seelect語(yǔ)語(yǔ)句只能返回回一條記錄,且且selecct語(yǔ)句里面面必須有個(gè)iinto或使使用游標(biāo),還還要保證有且且僅有一條記記錄被返回,這這是它比較特特別的地方,不不然會(huì)報(bào)錯(cuò)。在PL_SSQL里面使使用inseert、deelete、updatte后加上ccommitt不然起不了了作用有時(shí),只只不過(guò)。同時(shí)還有這這么一個(gè)需求求-執(zhí)行上述述語(yǔ)句以后有有多少條記錄錄受影響(除除selecct,對(duì)它來(lái)來(lái)說(shuō)沒(méi)多大意意義),這樣樣做:dbms_ouutput.put_lline(ssql%roowcounnt|條
58、記錄錄受影響);sql代代表剛剛執(zhí)行行完的sqll語(yǔ)句,而rrowcouunt代表剛剛剛執(zhí)行完的的sql語(yǔ)句句影響了多少少條記錄。如果在PL_SQL里創(chuàng)創(chuàng)建一張表得得這樣寫(xiě):eexecutte immmediatte crreate tablee T(nnnn varrchar22(20) deffault aaaa);由于外面已已經(jīng)有單引號(hào)號(hào)了所以里面面的一個(gè)單引引號(hào)得用兩個(gè)個(gè)代表一個(gè)。defauult是給一一個(gè)默認(rèn)值。PL_SQL里里條件語(yǔ)句是是形如if (條件) then elsiif (條件件) theen elsee end if;注意意最后一個(gè)eelse后沒(méi)沒(méi)有thenn,其他條件
59、件后有,而且且elsiff沒(méi)有那個(gè)ee,最后以eend iff;結(jié)束。PL_SQL里里也有三種循循環(huán),首先看看第一種,如如下:declareei binarry_intteger :=0;begin loopdbms_ouutput.put_lline(ii);i:= i+11;exit whhen (ii=11); end lloop;end;這也類(lèi)似于Jaava里的ddo -whhile循環(huán)環(huán);第二種,如下:declaree j binnary_iintegeer :=11;begin whilee j111 looppdbms_ouutput.put_lline(jj);j := j+1
60、; end lloop;end;這也類(lèi)似于Jaava里的wwhile循循環(huán);第三種,如下:beginbeginfor k iin 1.10 looopdbms_ouutput.put_lline(kk);end looop; for k in reeversee 1.110 looop dbms_ooutputt.put_line(k); end looop;end;這類(lèi)似于Javva里的foor循環(huán),rreversse表示逆序序循環(huán),1.100指定循環(huán)范范圍。PL_SQL里里也可以逮某某種類(lèi)型的錯(cuò)錯(cuò)誤,Javva里每一種種excepption都都有相應(yīng)的類(lèi)類(lèi)為代表,同同理PL_SSQL里也一
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)光學(xué)儀器行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)幼小銜接教育行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)旅游行業(yè)并購(gòu)重組擴(kuò)張戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)休閑餐飲行業(yè)全國(guó)市場(chǎng)開(kāi)拓戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)知識(shí)密集型服務(wù)行業(yè)營(yíng)銷(xiāo)創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)鉭電容器行業(yè)全國(guó)市場(chǎng)開(kāi)拓戰(zhàn)略制定與實(shí)施研究報(bào)告
- 新形勢(shì)下智能門(mén)鎖行業(yè)轉(zhuǎn)型升級(jí)戰(zhàn)略制定與實(shí)施研究報(bào)告
- 德州黑陶品牌推廣調(diào)研
- 單位辦公室2025年工作要點(diǎn)
- 護(hù)肝藥品知識(shí)培訓(xùn)課件
- 梁平法制圖規(guī)則及鋼筋翻樣講解
- 乙肝 丙肝培訓(xùn)課件
- 2024屆湖北省武漢實(shí)驗(yàn)外國(guó)語(yǔ)學(xué)校數(shù)學(xué)七上期末統(tǒng)考模擬試題含解析
- 基于深度學(xué)習(xí)的網(wǎng)絡(luò)釣魚(yú)郵件識(shí)別技術(shù)研究
- 融資成本視角下的船舶融資租賃模式研究
- 感冒中醫(yī)理論知識(shí)課件
- 2023年希望杯數(shù)學(xué)培訓(xùn)100題-六年級(jí)(含答案)
- 一年級(jí)科學(xué)人教版總結(jié)回顧2
- 個(gè)人住房貸款提前還款月供及節(jié)省利息EXCEL計(jì)算
- 第五單元《圓》教材解析-人教版數(shù)學(xué)六年級(jí)上冊(cè)
- 患者突發(fā)昏迷應(yīng)急預(yù)案演練腳本-
評(píng)論
0/150
提交評(píng)論