毛片在线视频观看,一级日韩免费大片,在线网站黄色,澳门在线高清一级毛片

薈聚奇文、博采眾長(zhǎng)、見賢思齊
當(dāng)前位置:公文素材庫 > 計(jì)劃總結(jié) > 工作總結(jié) > 我個(gè)人關(guān)于ORACLE課程提綱的總結(jié)

我個(gè)人關(guān)于ORACLE課程提綱的總結(jié)

網(wǎng)站:公文素材庫 | 時(shí)間:2019-05-29 15:09:42 | 移動(dòng)端:我個(gè)人關(guān)于ORACLE課程提綱的總結(jié)

我個(gè)人關(guān)于ORACLE課程提綱的總結(jié)

1.簡(jiǎn)單介紹下ORACLE的總體框架

oracle的體系很龐大,要學(xué)習(xí)它,首先讓我們了解oracle的框架。在這里,簡(jiǎn)要的講一下oracle的架構(gòu)

1、物理結(jié)構(gòu)(由控制文件、數(shù)據(jù)文件、重做日志文件、參數(shù)文件、歸檔文件、密

碼文件組成)

控制文件:包含維護(hù)和驗(yàn)證數(shù)據(jù)庫完整性的必要信息、一個(gè)數(shù)據(jù)庫至少需要一

個(gè)控制文件

數(shù)據(jù)文件:存儲(chǔ)數(shù)據(jù)的文件

重做日志文件:含對(duì)數(shù)據(jù)庫所做的更改記錄,這樣萬一出現(xiàn)故障可以啟用數(shù)據(jù)恢復(fù)。一個(gè)數(shù)據(jù)庫至少需要兩個(gè)重做日志文件

參數(shù)文件:定義Oracle例程的特性,例如它包含調(diào)整SGA中一些內(nèi)存結(jié)構(gòu)大小的參數(shù)

歸檔文件:是重做日志文件的脫機(jī)副本,這些副本可能對(duì)于從介質(zhì)失敗中進(jìn)行恢復(fù)很必要。

密碼文件:認(rèn)證哪些用戶有權(quán)限啟動(dòng)和關(guān)閉Oracle例程

2、邏輯結(jié)構(gòu)(表空間、段、區(qū)、塊)

表空間:是數(shù)據(jù)庫中的基本邏輯結(jié)構(gòu),一系列數(shù)據(jù)文件的集合。段:是對(duì)象在數(shù)據(jù)庫中占用的空間

區(qū):是為數(shù)據(jù)一次性預(yù)留的一個(gè)較大的存儲(chǔ)空間

塊:ORACLE最基本的存儲(chǔ)單位,在建立數(shù)據(jù)庫的時(shí)候指定

3、內(nèi)存分配(SGA和PGA)

SGA:是用于存儲(chǔ)數(shù)據(jù)庫信息的內(nèi)存區(qū),該信息為數(shù)據(jù)庫進(jìn)程所共享。它包含

Oracle服務(wù)器的數(shù)據(jù)和控制信息,它是在Oracle服務(wù)器所駐留的計(jì)算機(jī)的實(shí)際內(nèi)存中得以分配,如果實(shí)際內(nèi)存不夠再往虛擬內(nèi)存中寫。

PGA:包含單個(gè)服務(wù)器進(jìn)程或單個(gè)后臺(tái)進(jìn)程的數(shù)據(jù)和控制信息,與幾個(gè)進(jìn)程共享的SGA正相反PGA是只被一個(gè)進(jìn)程使用的區(qū)域,PGA在創(chuàng)建進(jìn)程時(shí)分配在

終止進(jìn)程時(shí)回收

4、后臺(tái)進(jìn)程(數(shù)據(jù)寫進(jìn)程、日志寫進(jìn)程、系統(tǒng)監(jiān)控、進(jìn)程監(jiān)控、檢查點(diǎn)進(jìn)程、歸

檔進(jìn)程、服務(wù)進(jìn)程、用戶進(jìn)程)

數(shù)據(jù)寫進(jìn)程:負(fù)責(zé)將更改的數(shù)據(jù)從數(shù)據(jù)庫緩沖區(qū)高速緩存寫入數(shù)據(jù)文件日志寫進(jìn)程:將重做日志緩沖區(qū)中的更改寫入在線重做日志文件

系統(tǒng)監(jiān)控:檢查數(shù)據(jù)庫的一致性如有必要還會(huì)在數(shù)據(jù)庫打開時(shí)啟動(dòng)數(shù)據(jù)庫的恢復(fù)

進(jìn)程監(jiān)控:負(fù)責(zé)在一個(gè)Oracle進(jìn)程失敗時(shí)清理資源

檢查點(diǎn)進(jìn)程:負(fù)責(zé)在每當(dāng)緩沖區(qū)高速緩存中的更改永久地記錄在數(shù)據(jù)庫中時(shí),更新控制文件和數(shù)據(jù)文件中的數(shù)據(jù)庫狀態(tài)信息。

歸檔進(jìn)程:在每次日志切換時(shí)把已滿的日志組進(jìn)行備份或歸檔服務(wù)進(jìn)程:用戶進(jìn)程服務(wù)。

用戶進(jìn)程:在客戶端,負(fù)責(zé)將用戶的SQL語句傳遞給服務(wù)進(jìn)程,并從服務(wù)器段拿回查詢數(shù)據(jù)。

5、oracle例程:Oracle例程由SGA內(nèi)存結(jié)構(gòu)和用于管理數(shù)據(jù)庫的后臺(tái)進(jìn)程組成。

例程一次只能打開和使用一個(gè)數(shù)據(jù)庫。6、SCN(SystemChangeNumber):系統(tǒng)改變號(hào),一個(gè)由系統(tǒng)內(nèi)部維護(hù)的序列號(hào)。當(dāng)系統(tǒng)需要更新的時(shí)候自動(dòng)增加,他是系統(tǒng)中維持?jǐn)?shù)據(jù)的一致性和順序恢復(fù)的重要標(biāo)志。

2.

介紹項(xiàng)目中常用的標(biāo)準(zhǔn)SQL知識(shí)點(diǎn)

oracle左/右/全連接

innerjoin--內(nèi)連接和where相同;相當(dāng)于join;

leftjoin--左向外連接,返回左邊表所有符合條件的rightjoin--右向外連接,返回右邊表所有符合條件的

fulljoin--完整外部連接,左向外連接和右向外連接的合集--建立測(cè)試數(shù)據(jù)

createtablea(idnumber);createtableb(idnumber);createtablec(idnumber);

insertintoavalues(1);insertintoavalues(2);insertintoavalues(3);insertintobvalues(1);insertintobvalues(2);insertintobvalues(4);insertintocvalues(1);--左:

--主流數(shù)據(jù)庫通用的方法

select*fromaleftjoinbona.id=b.id;

--Oracle特有的方法--最好不要用這樣,不便于sql語句的移植。select*froma,bwherea.id=b.id(+);IDID

--------------------11223

--右:

--主流數(shù)據(jù)庫通用的方法

select*fromarightjoinbona.id=b.id;--Oracle特有的方法

select*froma,bwherea.id(+)=b.id;

IDID

--------------------1124--內(nèi)

--主流數(shù)據(jù)庫通用的方法

select*fromajoinbona.id=b.id;--where關(guān)聯(lián)

select*froma,bwherea.id=b.id;

IDID

--------------------11

22--全外

--主流數(shù)據(jù)庫通用的方法

select*fromafulljoinbona.id=b.id;--Oracle特有的方法select*froma,b

wherea.id=b.id(+)union

select*froma,b

wherea.id(+)=b.id;

IDID

--------------------11223

4

對(duì)于多表查詢,如下:select*froma

leftjoinbona.id=b.idleftjoinconc.id=b.id;

IDID

--------------------11223

相當(dāng)于先進(jìn)行第一個(gè)leftjoin,得到結(jié)果集A(3條記錄);結(jié)果集A再與第二個(gè)leftjoin進(jìn)行查詢;select*froma

leftjoinbona.id=b.idrightjoinconc.id=b.id;相當(dāng)于先進(jìn)行第一個(gè)leftjoin,得到結(jié)果集A(3條記錄);結(jié)果集A再與rightjoin進(jìn)行查詢,即以c表為主,因?yàn)镃表只有一個(gè)記錄,所以最終才顯示一條記錄;

3.查詢效率優(yōu)化方式介紹

表索引介紹,表索引的建立技巧索引優(yōu)點(diǎn):

第一,通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。第二,可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。

第三,可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。第四,在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組和排序的時(shí)間。

第五,通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。(哪給表中的所有列加上索引是否合理)

索引缺點(diǎn):

第一,創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù)量的增加而增加。第二,索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還要占一定的

物理空間,如果要建立聚簇索引,那么需要的空間就會(huì)更大。第三,當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),這樣就

降低了數(shù)據(jù)的維護(hù)速度。

(索引是建立在數(shù)據(jù)庫表中的某些列的上面。因此,在創(chuàng)建Oracle數(shù)據(jù)庫索引的時(shí)候,應(yīng)該仔細(xì)考慮在哪些列上可以創(chuàng)建索引,在哪些列上不能創(chuàng)建索引。)

建議創(chuàng)建索引的列:

在經(jīng)常需要搜索的列上,可以加快搜索的速度;

在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);

在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,其指定的范圍是連續(xù)的;

在經(jīng)常需要排序的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時(shí)間;

經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。

不該創(chuàng)建索引的列:

對(duì)于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引。這是因?yàn),既然這些列很少使用到,因此有索引或者無索引,并不能提高查詢速度。相反,由于增加了索

引,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求。對(duì)于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引。這是因?yàn),由于這些列的取值很少,例如人事表的性別列,在查詢的結(jié)果中,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例,即需要在表中搜索的數(shù)據(jù)行的比例很大。增加索引,并不能明顯加快檢索

速度。

對(duì)于那些定義為text,image和bit數(shù)據(jù)類型的列不應(yīng)該增加索引。這是因?yàn),這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少。第四,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí),不應(yīng)該創(chuàng)建索引。這是因?yàn),修改性能和檢索性能是互相矛盾的。當(dāng)增加索引時(shí),會(huì)提高檢索性能,但是會(huì)降低修改性能。當(dāng)減少索引時(shí),會(huì)提高修改性能,降低檢索性能。因此,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時(shí),不應(yīng)該創(chuàng)建Oracle數(shù)據(jù)庫索引。

NESTEDLOOP:

對(duì)于被連接的數(shù)據(jù)子集較小的情況,嵌套循環(huán)連接是個(gè)較好的選擇。在嵌套循環(huán)中,內(nèi)表被外表驅(qū)動(dòng),外表返回的每一行都要在內(nèi)表中檢索找到與它匹配的行,因此整個(gè)查詢返回的結(jié)果集不能太大(大于1萬不適合),要把返回子集較小表的作為外表(CBO默認(rèn)外表是驅(qū)動(dòng)表),而且在內(nèi)表的連接字段上一定要有索引。當(dāng)然也可以用ORDERED提示來改變CBO默認(rèn)的驅(qū)動(dòng)表,使用USE_NL(table_name1table_name2)可是強(qiáng)制CBO執(zhí)行嵌套循環(huán)連接。

Nestedloop一般用在連接的表中有索引,并且索引選擇性較好的時(shí)候.

步驟:確定一個(gè)驅(qū)動(dòng)表(outertable),另一個(gè)表為innertable,驅(qū)動(dòng)表中的每一行與inner表中的相應(yīng)記錄JOIN。類似一個(gè)嵌套的循環(huán)。適用于驅(qū)動(dòng)表的記錄集比較。

擴(kuò)展閱讀:Oracle課程小結(jié)1 整本書內(nèi)容

Oracle課程小結(jié)

1.Dual

Dual是Oracle中的一個(gè)實(shí)際存在的表,任何用戶均可讀取,常用在沒有目標(biāo)表的Select語句塊中

DUAL就是個(gè)一行一列的表,如果你往里執(zhí)行insert、delete、truncate操作,就會(huì)導(dǎo)致很多程序出問題

不要去執(zhí)行dropdual的操作,否則會(huì)使系統(tǒng)不能用,數(shù)據(jù)庫起不了

DUAL是屬于SYSschema的一個(gè)表,然后以PUBLICSYNONYM的方式供其他數(shù)據(jù)庫USER使用

2.Null

在Oracle中,值null被看作一個(gè)未知值,任何包含NULL值的算術(shù)運(yùn)算都會(huì)得到結(jié)果NULL,。因此,下面的select語句返回nullselect5+7+null+9fromdual;selectnull*9fromdual;

空字符串:Oracle把空字符串("")當(dāng)作null,因此length("")的值是null,而不是0。

一個(gè)null值與任何其它值比較,包括null值,結(jié)果都是null,因此,對(duì)NULL的=、!=、>、=、

3.函數(shù)

函數(shù)是一種有零個(gè)或多個(gè)參數(shù)并且有一個(gè)返回值的程序。在SQL中Oracle內(nèi)建了一系列函,也可自定義函數(shù)數(shù)單行函數(shù),多行函數(shù)(組函數(shù))

Lower(c)--小寫轉(zhuǎn)換返回c小寫字符

Concat(c1,c2)--連接字符串

c1,c2均為字符串,函數(shù)將c2連接到c1的后面,如果c1為null,將返回c2.如果c2為null,則返回c1,如果c1、c2都為null,則返回null,如果c1,c2其中之一為數(shù)字,或都為數(shù)字

Concat("10",10)Concat(10,10)

Substr(string,start_position,[length])--取字串參數(shù)1:string要處理的字符串參數(shù)2:截取字符串的開始位置

參數(shù)3:截取的字符串的長(zhǎng)度(而不是字符串的結(jié)束位置),如果省略,則返回從start_position開始到string尾之間的字符串SelectSUBSTR("Hello",2)FromDual

Instr(column|expression,"string",[m],[n])--查詢指定字符在字符串中的位置

參數(shù)1:被搜索的字符串或者是表達(dá)式參數(shù)2:要查找的字符

參數(shù)3:從什么位置開始查詢

參數(shù)4:這個(gè)字符出現(xiàn)的位置比如說:第一次出現(xiàn)的位置,第二次出現(xiàn)的位置。如果此參數(shù)3為正,從左到右開始檢索,如果此參數(shù)為負(fù),從右到左檢索最后兩個(gè)參數(shù)是默認(rèn)的是1和1

SELECTinstr("abc","d")FROMdual;--返回0

SELECTinstr("syranmo","a",1,2)FROMdual;--返回0SELECTINSTR("oWo","W")FROMDUAL;--?

Round(number,[decimalplaces])--四舍五入函數(shù)參數(shù)1:要處理的數(shù)值(數(shù)值表達(dá)式)

參數(shù)2:四舍五入時(shí)取的小數(shù)的位數(shù),不填則返回整數(shù)selectround(123.456)fromdual;得到123selectround(123.456,0)fromdual;得到123selectround(123.456,1)fromdual;得到123.5selectround(123.456,2)fromdual;得到123.46selectround(123.456,3)fromdual;得到123.456selectround(-123.456,2)fromdual;得到-123.

Mod(number,divisor)--返回一個(gè)number除以divisor的余數(shù)參數(shù)1:為被除數(shù)。

參數(shù)2:為除數(shù)。如果divisor為零,函數(shù)MOD返回值為原來number

MOD(3,2)等于1MOD(3,0)等于3MOD(2,3)等于2

To_char(date,"format_model")--日期轉(zhuǎn)為字符To_char(number,"format_model")--數(shù)字轉(zhuǎn)為字符

格式化元素,用于顯示字符形式的數(shù)字值:"9"表示一個(gè)數(shù),"."打印一個(gè)小數(shù)點(diǎn)","打印一個(gè)千位指示

SELECTTO_CHAR(12345.529,"999,999.99")FROMDUAL;--12,345.53

Replace(text,search_string,replacement_string)--替換字符串

從字符串(text)查找一個(gè)文本表達(dá)式(search_string),如果找到,用指定的置換串(replacement_string)代替它

如果replacement_string為空,那么所有的search_string都被移除。如果search_string為null,那么就返回原來的

SELECTREPLACE("hello","ello","i")FROMDUAL;--hi

To_number([,,])

是將一些處理過的按一定格式編排過的字符串變回?cái)?shù)值型的格式SELECTTO_NUMBER("20")*5FROMDUAL;--100

To_date(string1,[format_mask],[nls_language])--轉(zhuǎn)換為日期Format_mask"yyyy-MM-ddHH24:mi:ss"

selectTo_Date("1981-1-1","YYYY-MM-DD")fromdual--1981-1-1

Length(string)--返回字符串的長(zhǎng)度

selectlength("我")fromdual--1selectlength("AB")fromdual-2

4.dbms_output

如果dbms_output.put_line的內(nèi)容不能顯示,需要在命令行中先敲入setserveroutputon;

put和put_line

當(dāng)使用過程put_line時(shí),會(huì)自動(dòng)在行的尾部追加行結(jié)束符;當(dāng)使用過程put時(shí),需要使用過程new_line追加行結(jié)束符.

setserverouton

begin

dbms_output.put_line("偉大的中華民族");

dbms_output.put("中國(guó)");

dbms_output.put(",偉大的祖國(guó)");

dbms_output.new_line;

end;/

偉大的中華民族

中國(guó),偉大的祖國(guó)

new_line

該過程用于在行的尾部追加行結(jié)束符.當(dāng)使用過程PUT時(shí),必須調(diào)用NEW_LINE過程來結(jié)束行.

5.PL/SQL塊DECLARE/*

*定義部分(可選)定義常量、變量、復(fù)雜數(shù)據(jù)類型、游標(biāo)、例解*/

BEGIN/*

*執(zhí)行部分(必須)PL/SQL語句和SQL語句*/

EXCEPTION/*

*異常處理部分(可選)處理運(yùn)行錯(cuò)誤*/

END;/*塊結(jié)束標(biāo)記*/命名塊:指具有特定名稱標(biāo)識(shí)的PL/SQL塊,在PL/SQL塊前使用加以標(biāo)記

begin

dbms_output.put_line("Hello,World!");begin

dbms_output.put_line("Good");end;--end;--

賦值操作符“:=”變量名:=值

定義變量

變量名數(shù)據(jù)類型

StudScoreNUMBER(5,2);StudNameVARCHAR(20);

定義常量

添加關(guān)鍵字CONSTANT并賦值

PICONSTANTNUMBER(8,7):=3.1415926;

條件控制

有三種語句形式IF-THEN

IF-THEN-ELSEIF-THEN-ELSIF

IFTHEN語句;ENDIF;

IFTHEN語句;ELSE語句;ENDIF;

IFTHEN語句;

ELSIFTHEN語句;

ELSIFTHEN語句;ELSE語句;ENDIF;

CASE

WHENTHEN語句;

WHENTHEN語句;

WHENTHEN語句;[Else]語句;EndCase;

CASE

WHENTHEN語句;

WHENTHEN語句;

WHENTHEN語句;[Else]語句;

EndCase;

有三種形式的LOOP語句LOOP

WHILE-LOOPFOR-LOOP

LOOP語句;

[EXIT]

[EXIT-WHEN]ENDLOOP;

EXIT強(qiáng)制循環(huán)無條件完成立即退出循環(huán)

EXITWHEN;EXIT語句時(shí)對(duì)WHEN子句中的條件進(jìn)行判斷如果判定條件為TRUE,則循環(huán)完成

WHILELOOP

語句;ENDLOOP;

FORIN[Reverse]lower_bound..higher_boundLOOP語句;ENDLOOP;

6.子程序過程

用于執(zhí)行某項(xiàng)操作函數(shù)

用于執(zhí)行某項(xiàng)操作并返回值

存儲(chǔ)過程語法

CREATE[ORREPLACE]PROCEDURE[(參數(shù)1,參數(shù)N)]IS|AS[局部聲明]BEGIN

可執(zhí)行語句;EXCEPTION

[例外處理程序];END[];參數(shù)說明

變量名[IN|OUT|INOUT]

IN:輸入,接受值,默認(rèn)模式

OUT:輸出,將值返回給子程序的調(diào)用程序INOUT:輸入輸出,接受值并返回已更新的值對(duì)于IN模式的實(shí)參可以是常量或變量,但對(duì)于OUT和INOUT模式的實(shí)參必須是變量。

CreateOrReplaceProcedureProcGetName(StudNameinoutvarchar2)isBegin

StudName:=substr(StudName,instr(StudName,"明",2));End;/

declare

StudNamevarchar2(15):="明小明";begin

ProcGetName(StudName);

DBMS_OUTPUT.PUT_LINE(StudName);end;函數(shù)語法

CREATE[ORREPLACE]FUNCTION[(參數(shù)1,參數(shù)N)]RETURNdatatypeIS[局部聲明]BEGIN可執(zhí)行語句;[EXCEPTION][例外處理程序]END[];

僅接受IN參數(shù)

CreateOrReplaceFunctionGetItemScore(Stand_Ansvarchar2,Custor_Ansvarchar2)returnintis

LenCustorint:=length(Custor_Ans);begin

ifLenCustor>length(stand_ans)orCustor_AnsISNULLthenreturn0;endif;

foriin1..LenCustorloop

ifinstr(stand_ans,substr(custor_ans,i,1))=0thenreturn0;endif;endloop;

returnLenCustor;end;/

SelectGetItemScore("ABC","AC")FromDual;

7.OracleSQL*Plus命令

setlinesize設(shè)置每行顯示的長(zhǎng)度SETLINESIZE100

start或@告訴SQLPLUS執(zhí)行已經(jīng)存儲(chǔ)到sql文件中語句

執(zhí)行一個(gè)SQL腳本文件SQL>startfile_nameSQL>@file_name

我們可以將多條sql語句保存在一個(gè)文本文件中,這樣當(dāng)要執(zhí)行這個(gè)文件中的所有的sql語句時(shí),用上面的任一命令即可

修改用戶密碼

ALTERUSER用戶名IDENTIFIEDBY密碼;

oracle中邏輯運(yùn)算符(not,and,or)及其優(yōu)先級(jí)

這3種邏輯運(yùn)算符中,NOT運(yùn)算符的優(yōu)先級(jí)最高,而后是AND,最后是OR

Oracle中的SPOOL命令是假脫機(jī)命令,可用于轉(zhuǎn)儲(chǔ)執(zhí)行的命令和結(jié)果,其效果有點(diǎn)像DOS命令中的轉(zhuǎn)向命令。SPOOL命令也可以用于轉(zhuǎn)出數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)。

例如在SQL*Plus命令行中可以直接輸入:SPOOL假脫機(jī)文件名啟動(dòng)假脫機(jī)操作。

關(guān)閉假脫機(jī)操作可以在SQL*Plus中輸入:SPOOLOFF例:假脫機(jī)命令的使用。spoolc:\\SpoolFile.txtsetpagesize300setlinesize300select*fromemp;select*fromdept;spooloff;

執(zhí)行完畢后,可以在C盤中找到SpoolFile.txt,打開后可以看到通過Spool假脫機(jī)命令轉(zhuǎn)向到該文件中的內(nèi)容。

8.記錄類型

定義一個(gè)RECORD類型TYPEISRECORD(

fieldname1[NOTNULL]:

fieldnameN[NOTNULL]);

屬性的類型

%TYPE引用數(shù)據(jù)庫列

%ROWTYPE代表表中的行

%type和%rowtype可以用來指定列的數(shù)據(jù)類型

SNameStudInfo.StudName%Type;Stud_RecStudInfo%ROWTYPE;

TypeVIPStudRecisrecord(

VIPIDVarchar2(15),VIPNamevarchar2(20));

聲明記錄類型變量

StudRecVIPStudRec;

引用字段的語法是

recordname.columnname用于給列賦值的語法是

recordname.columnname:=expression;

語法

SELECTINTOFROMWHERE;

SELECTStudNo,StudNameINTOStudRecFROMStudInfoWHEREStudNo=‘99070470’;fetchmycurintoStudRec;

TIDTeacherInfo.TeacherNo%Type;TNameTeacherInfo.TeacherName%type;

9.游標(biāo)

CURSORIS;

CURSORmycuris

selectTeacherNo,TeacherNameFromTeacherInfo

WhereTeacherBirthDay>=To_Date("1981-2-5","YYYY-MM-DD");控制顯式游標(biāo)OPENFETCHCLOSE

在使用OPEN、CLOSE或FETCH語句引用這些語句之前必須對(duì)游標(biāo)進(jìn)行聲明

OPENopenmycur;

FETCHINTOvar1,…,varN;OR

FETCHINTOrecord_variable;fetchmycurintoTID,TName;

每個(gè)游標(biāo)有四個(gè)屬性可以用于訪問游標(biāo)的環(huán)境區(qū)域%NOTFOUND%FOUND%ROWCOUNT%ISOPEN

循環(huán)取記錄

whilemycur%foundloopdbms_output.put_line(TID||TNAME);fetchmycurintoTID,TName;endloop;

CLOSE;

closemycur;

10.表

CREATETABLE[schema.]table

(columndatatype[DEFAULTexpr][,...]);指定:表名

列名、列數(shù)據(jù)類型和列的大小

數(shù)據(jù)類型

VARCHAR2(size)可變長(zhǎng)度的字符數(shù)據(jù)長(zhǎng)度可以到4000字節(jié)CHAR(size)固定長(zhǎng)度的字符數(shù)據(jù)NUMBER(p,s)可變長(zhǎng)度的數(shù)字?jǐn)?shù)據(jù)DATE日期和時(shí)間值NCHAR、NVARCHAR2,國(guó)家字符集,與環(huán)境變量NLS指定的語言集密切相關(guān),使用方法和CHAR、VARCHAR2相同。

在創(chuàng)建表時(shí),為一個(gè)列指定一個(gè)默認(rèn)值createtablec(c1char(10)DEFAULT"1111")

altertabletestaddsyddatedefaultsysdate;

altertabletmodify(cccdefault"ccc");altertabletmodify(cccdefaultnull);

INSERTINTOdepartments

(department_id,department_name,manager_id)VALUES(300,"Engineering",DEFAULT);

UPDATEdepartments

SETmanager_id=DEFAULTWHEREdepartment_id=10;

約束類型NOTNULLUNIQUE

PRIMARYKEYFOREIGNKEYCHECK

列級(jí)約束

column[CONSTRAINTconstraint_name]constraint_type,表級(jí)約束column,...

[CONSTRAINTconstraint_name]constraint_type(column,...),

NOTNULL約束

只能定義在列級(jí),不能定義在表級(jí).

防止NULL值進(jìn)入指定的列,在單列基礎(chǔ)上定義,默認(rèn)情況下,ORACLE允許在任何列中有NULL值

CREATETABLEemployees(

employee_idNUMBER(6),

last_nameVARCHAR2(25)NOTNULL,salaryNUMBER(8,2),commission_pctNUMBER(2,2),hire_dateDATE

CONSTRAINTemp_hire_date_nnNOTNULL,...

UNIQUE約束

用來保護(hù)一個(gè)表中的一個(gè)或者多個(gè)列沒有任何兩行在收到保護(hù)的列中具有重復(fù)的數(shù)據(jù).ORACLE在唯一鍵列上自動(dòng)生成一個(gè)唯一索引以實(shí)現(xiàn)唯一性

CREATETABLEemployees(

employee_idNUMBER(6)unique,

last_nameVARCHAR2(25)NOTNULL,emailVARCHAR2(25),salaryNUMBER(8,2),commission_pctNUMBER(2,2),hire_dateDATENOTNULL,...

CONSTRAINTemp_email_ukUNIQUE(email));

PRIMARYKEY約束

唯一鍵的所有特征都適用于主鍵約束,只是在主鍵列中不允許有NULL值CREATETABLEdepartments(

department_idNUMBER(4),emailVARCHAR2(25),location_idNUMBER(4),CONSTRAINTdept_id_pkPRIMARYKEY(department_id));

FOREIGNKEY約束

通過使用公共列在表之間建立一種父子(parent-child)關(guān)系,在表上定義的外部鍵可以指向主鍵或者其他表的唯一鍵.

CREATETABLEemployees(

employee_idNUMBER(6),...

department_idNUMBER(4),

CONSTRAINTemp_dept_fkFOREIGNKEY(department_id)REFERENCESdepartments(department_id),

CHECK約束

檢查在約束中指定的條件是否得到了滿足.

createtableemployees(salnumber(7,2)

constraintemp_sal_ck1check(sal>0))

createtabley(

idvarchar2(7)

check(ascii(substr(id,1,1))between65and90andsubstr(id,1,1)isnotnullandascii(substr(id,2,1))between65and90andsubstr(id,2,1)isnotnullandascii(substr(id,3,1))between65and90andsubstr(id,3,1)isnotnullandascii(substr(id,4,1))between65and90andsubstr(id,4,1)isnotnullandascii(substr(id,5,1))between65and90andsubstr(id,5,1)isnotnull));

CREATETABLETT(

department_idNUMBER(4)check(department_idlike"trj%"),emailVARCHAR2(25)PRIMARYKEY);

CREATETABLETT(

department_idNUMBER(4),

emailVARCHAR2(25)PRIMARYKEY,

STUDSEXVARCHAR2(2)CHECK(STUDSEXIN("男","女")));

添加一個(gè)新行到表中INSERTINTOtable[(column[,column...])]VALUES(value[,value...]);

INSERTINTOdepartmentsVALUES(100,"Finance",NULL,NULL,SYSDATE,TO_DATE("FEB3,1999","MONDD,YYYY");

改變表中的數(shù)據(jù)UPDATEtableSETcolumn=value[,column=value,...][WHEREcondition];

UPDATEcopy_emp

SETdepartment_id=110

WHEREdepartment_name="HELLO";

從表中刪除行

DELETE[FROM]table[WHEREcondition];

DELETEFROMdepartments

WHEREdepartment_name="Finance";

11.視圖

視圖是一個(gè)SQL查詢,它永久存在于數(shù)據(jù)庫中,并被賦予了一個(gè)名稱,視圖是從基表中生成的虛擬表

CREATE[ORREPLACE][FORCE|NOFORCE]VIEWview[(alias[,alias]...)]ASsubquery

[WITHCHECKOPTION[CONSTRAINTconstraint]][WITHREADONLY[CONSTRAINTconstraint]];

withcheckoption:表名只有子查詢檢索的行才能被插入、刪除、更新withreadonly:說明只能對(duì)基表中的行進(jìn)行只讀訪問

onstraint_name:指定withcheckoption或readonly約束的名稱。

CREATEVIEWsalvu50

ASSELECTemployee_idID_NUMBER,last_nameNAME,salary*12ANN_SALARYFROMemployees

WHEREdepartment_id=50;

SELECT*FROMsalvu50;

內(nèi)建視圖是一個(gè)帶有別名(或相關(guān)名)的可以在SQL語句中使用的子查詢

Top-N分析

SELECTROWNUMasRANK,last_name,salaryFROM(SELECTlast_name,salaryFROMemployeesORDERBYsalaryDESC)AWHEREROWNUMWHEREexproperator(SELECTselect_listFROMtable);

查詢的結(jié)果進(jìn)行排序處理。排序處理是通過ORDERBY子句來實(shí)現(xiàn)的。ORDERBYorder_list[ASC|DESC]

13.組函數(shù)AVGCOUNTMAXMINSUM

SELECT[column,]group_function(column),...FROMtable

[WHEREcondition][GROUPBYcolumn][ORDERBYcolumn];

SELECTAVG(salary),MAX(salary),MIN(salary),SUM(salary)FROMemployees

WHEREjob_idLIKE"%REP%";

SELECTCOUNT(*)FROMemployees

WHEREdepartment_id=50;

SELECTCOUNT(DISTINCTdepartment_id)FROMemployees;

約束分組結(jié)果:HAVING子句GROUPBY子句

SELECTdepartment_id,AVG(salary)FROMemployees

WHEREAVG(salary)>8000GROUPBYdepartment_id;

14.綜合知識(shí)

1.學(xué)生信息表(StudInfo)數(shù)據(jù)類字段是否P字段名稱約束型長(zhǎng)度為空KStudNoVarchar215Y字段描述舉例StudNameVarchar220StudSexChar2男,女StudBirthDDateYayClassNameVarchar250班級(jí)名稱計(jì)本012.課程信息表(CourseInfo)字段是否字段名稱數(shù)據(jù)類型PK字段描述舉例長(zhǎng)度為空CourseIDVarchar210Y課程編號(hào)A0101CourseNamVarchar2eCourseDescVarchar250100Y課程名稱Oracle課程描述OracleDB學(xué)生學(xué)號(hào)201*070470學(xué)生姓名李明學(xué)生性別男出生年月1980-10-33.學(xué)生成績(jī)表(StudScoreInfo)字段名數(shù)據(jù)類字段是否PK約束稱型長(zhǎng)度為空StudNoVarchar215Y字段描述舉例CourseIDVarchar210YStudScorNumber4,1[0,100e]注:一個(gè)學(xué)生可選修多門課,同一門課可由多個(gè)學(xué)生選修。

學(xué)生學(xué)號(hào)201*070470課程編號(hào)A0101學(xué)生成績(jī)80.51.分別寫出向以上各表插入一條記錄的SQL語句。(記錄為舉例中的數(shù)據(jù))2.寫出更新學(xué)生成績(jī)表(StudScoreInfo)中學(xué)號(hào)為201*070470,課程編號(hào)為A0101的成績(jī)?yōu)?5.5的SQL語句。

3.寫出在課程信息表(CourseInfo)中刪除課程編號(hào)為B0101的SQL語句。4.寫出查詢姓李的學(xué)生基本信息的SQL語句。

5.在學(xué)生成績(jī)表(StudScoreInfo)中,寫出將課程編號(hào)為A0101成績(jī)從高到低排序的SQL語句。

6.寫出在學(xué)生成績(jī)表(StudScoreInfo)中查詢學(xué)生成績(jī)大于等于90小于等于100或者大于等于70小于等于80的SQL語句。7.在學(xué)生成績(jī)表(StudScoreInfo)中,寫出統(tǒng)計(jì)各學(xué)生總分、平均分、課程門數(shù)、最高分、最低分的SQL語句。

8.寫出統(tǒng)計(jì)學(xué)生平均分大于80的SQL語句。

9.寫出查詢平均分最高的5個(gè)學(xué)生成績(jī)統(tǒng)計(jì)信息(包括學(xué)號(hào)、平均分字段)中的SQL語句。10.寫出查詢重修(學(xué)生成績(jī)小于60即為重修)15門以上的學(xué)生基本信息的SQL語句。11.綜合利用所學(xué)知識(shí),用SQL語句實(shí)現(xiàn)將各學(xué)生平均分(需統(tǒng)計(jì))按以下等級(jí)輸出,包括學(xué)生學(xué)號(hào)(StudNo)、平均分(PScore)、成績(jī)等級(jí)(ScoreLevel)字段。

平均分(PScore)成績(jī)等級(jí)(ScoreLevel)PScore>=90

優(yōu)秀

良好中等及格

80=

友情提示:本文中關(guān)于《我個(gè)人關(guān)于ORACLE課程提綱的總結(jié)》給出的范例僅供您參考拓展思維使用,我個(gè)人關(guān)于ORACLE課程提綱的總結(jié):該篇文章建議您自主創(chuàng)作。

來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請(qǐng)聯(lián)系我們及時(shí)刪除。


我個(gè)人關(guān)于ORACLE課程提綱的總結(jié)》由互聯(lián)網(wǎng)用戶整理提供,轉(zhuǎn)載分享請(qǐng)保留原作者信息,謝謝!
鏈接地址:http://www.seogis.com/gongwen/712076.html