第4章 數(shù)據(jù)表操作_第1頁(yè)
第4章 數(shù)據(jù)表操作_第2頁(yè)
第4章 數(shù)據(jù)表操作_第3頁(yè)
第4章 數(shù)據(jù)表操作_第4頁(yè)
第4章 數(shù)據(jù)表操作_第5頁(yè)
已閱讀5頁(yè),還剩85頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4講數(shù)據(jù)表操作本章學(xué)習(xí)導(dǎo)航本章學(xué)習(xí)導(dǎo)航本章學(xué)習(xí)要點(diǎn)(1)使用OEM創(chuàng)建、修改、查看和刪除數(shù)據(jù)表。(2)使用SQLDeveloper創(chuàng)建、修改、查看和刪除數(shù)據(jù)表。(3)使用PL/SQL創(chuàng)建、修改、查看和刪除數(shù)據(jù)表。(4)添加、刪除和修改數(shù)據(jù)表中的記錄。(5)數(shù)據(jù)完整性概述。(6)非空、默認(rèn)、唯一、檢查、主鍵和外鍵約束操作。(7)管理序列和同義詞。

(*)使用PL/SQL編程4.1數(shù)據(jù)庫(kù)概述數(shù)據(jù)表基礎(chǔ)數(shù)據(jù)表(Table)是數(shù)據(jù)在Oracle數(shù)據(jù)庫(kù)中的邏輯存儲(chǔ)單元,按指定關(guān)系模式將數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)的數(shù)據(jù)表中。4.1數(shù)據(jù)庫(kù)概述Oracle基本數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型的作用在于指明存儲(chǔ)數(shù)值時(shí)需要占據(jù)的內(nèi)存空間大小和進(jìn)行運(yùn)算的依據(jù)。Oracle的數(shù)據(jù)類(lèi)型分為標(biāo)量(Scalar)類(lèi)型、復(fù)合(Composite)類(lèi)型、引用(Reference)類(lèi)型和LOB(LargeObject)類(lèi)型4種類(lèi)型

。4.1數(shù)據(jù)庫(kù)概述Oracle基本數(shù)據(jù)類(lèi)型(1)CHAR(n)該數(shù)據(jù)類(lèi)型用于定義固定長(zhǎng)度的字符串,其中n用于指定字符串的最大長(zhǎng)度,n必須是正整數(shù)且不超過(guò)32767。(2)VARCHAR2(n)該數(shù)據(jù)類(lèi)型用于定義可變長(zhǎng)度的字符串,其中n用于指定字符串的最大長(zhǎng)度,n必須是正整數(shù)且不超過(guò)32767。(3)NUMBER(precision,scale)該數(shù)據(jù)類(lèi)型用于定義固定長(zhǎng)度的整數(shù)和浮點(diǎn)數(shù),其中precision表示精度,用于指定數(shù)字的總位數(shù);scale表示標(biāo)度,用于指定小數(shù)點(diǎn)后的數(shù)字位數(shù),默認(rèn)值為0,即沒(méi)有小數(shù)位數(shù)。4.1數(shù)據(jù)庫(kù)概述Oracle基本數(shù)據(jù)類(lèi)型(4)DATE該數(shù)據(jù)類(lèi)型用于定義日期時(shí)間類(lèi)型的數(shù)據(jù),其數(shù)據(jù)長(zhǎng)度為固定7個(gè)字節(jié),分別描述年、月、日、時(shí)、分、秒。

(5)TIMESTAMP該數(shù)據(jù)類(lèi)型也用于定義日期時(shí)間數(shù)據(jù),但與DATE僅顯示日期不同,TIMESTAMP類(lèi)型數(shù)據(jù)還可以顯示時(shí)間和上下午標(biāo)記,如“15-9月-200711:09:32.213AM”。

(6)BOOLEAN該數(shù)據(jù)類(lèi)型用于定義布爾型(邏輯型)變量,其值只能為T(mén)RUE(真)、FALSE(假)或NULL(空)。需要注意的是,該數(shù)據(jù)類(lèi)型是PL/SQL數(shù)據(jù)類(lèi)型,不能應(yīng)用于表列。4.1數(shù)據(jù)庫(kù)概述方案的概念方案,就是一系列數(shù)據(jù)庫(kù)對(duì)象的集合,是數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)的一個(gè)邏輯表示或描述。Oracle11g數(shù)據(jù)庫(kù)中并不是所有的數(shù)據(jù)庫(kù)對(duì)象都是方案對(duì)象,方案對(duì)象有表、索引、觸發(fā)器、數(shù)據(jù)庫(kù)鏈接、PL/SQL包、序列、同義詞、視圖、存儲(chǔ)過(guò)程、存儲(chǔ)函數(shù)等,非方案對(duì)象有表空間、用戶、角色、概要文件等。在Oracle11g數(shù)據(jù)庫(kù)中,每個(gè)用戶都擁有自己的方案,創(chuàng)建了一個(gè)用戶,就創(chuàng)建了一個(gè)同名的方案,方案與數(shù)據(jù)庫(kù)用戶是對(duì)應(yīng)的。用戶在數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)方案對(duì)象后,這個(gè)方案對(duì)象默認(rèn)地屬于這個(gè)用戶的方案。課堂案例1

—使用OEM創(chuàng)建GOODS表掌握Oracle中應(yīng)用OEM創(chuàng)建數(shù)據(jù)表的方法和基本步驟案例學(xué)習(xí)目標(biāo)進(jìn)入OEM表編輯頁(yè)面、列的數(shù)據(jù)類(lèi)型的選擇、OEM創(chuàng)建表的基本步驟。案例知識(shí)要點(diǎn)課堂案例1

—使用OEM創(chuàng)建GOODS表案例完成步驟添加標(biāo)題文字(1)啟動(dòng)OEM后,依次選擇“方案”、“表”。進(jìn)入“表”頁(yè)面。(2)單擊“創(chuàng)建”按鈕,進(jìn)入“創(chuàng)建表:表組織”頁(yè)面,選擇默認(rèn)的“標(biāo)準(zhǔn)(按堆組織)”方式。(3)單擊“繼續(xù)”按鈕,進(jìn)入“表一般信息”頁(yè)面。指寫(xiě)表名為GOODS,方案為SCOTT,表空間為T(mén)S_EBUY。并依次填寫(xiě)GOODS表中的每一列的名稱(chēng)和數(shù)據(jù)類(lèi)型。(4)單擊“確定”按鈕,完成新表的創(chuàng)建。并返回到對(duì)應(yīng)的方案頁(yè)面。

添加標(biāo)題文字教師演示講解課堂案例2——使用OEM修改GOODS表掌握Oracle中應(yīng)用OEM修改數(shù)據(jù)表的方法。案例學(xué)習(xí)目標(biāo)進(jìn)入表的編輯頁(yè)面、列數(shù)據(jù)類(lèi)型的修改、列的寬度的修改、添加新列、刪除已有列。案例知識(shí)要點(diǎn)課堂案例2——使用OEM修改GOODS表案例完成步驟添加標(biāo)題文字(1)啟動(dòng)OEM后,依次選擇“方案”、“表”,進(jìn)入“表”頁(yè)面,指定要操作的方案(如SCOTT)后,單擊“確定”按鈕,即顯示出指定方案中包含的表

。(2)選擇指定的表(如GOODS),單擊“編輯”按鈕,進(jìn)入表的編輯頁(yè)面。在該頁(yè)面中可以完成對(duì)表名、列名、列類(lèi)型等的修改

(3)修改完成后,單擊“應(yīng)用”按鈕,保存修改結(jié)果。添加標(biāo)題文字教師演示講解4.2.3使用OEM查看和刪除表OEM查看表添加標(biāo)題文字(1)啟動(dòng)OEM后,進(jìn)入指定方案(如SCOTT)的“表”頁(yè)面。(2)選擇要查看的表后,單擊“查看”按鈕,即可查看到表的一般信息。添加標(biāo)題文字教師演示講解

4.2.3使用OEM查看和刪除表OEM刪除表添加標(biāo)題文字(1)在指定方案的“表”頁(yè)面,選擇要?jiǎng)h除的表(如:GOODS),單擊“使用選項(xiàng)刪除”按鈕,進(jìn)入“確認(rèn)”頁(yè)面。(2)單擊“是”按鈕,根據(jù)指定的選項(xiàng)完成對(duì)指定表的刪除操作。添加標(biāo)題文字教師演示講解

課堂案例3——使用SQLDeveloper創(chuàng)建Users表掌握Oracle中應(yīng)用SQLDeveloper創(chuàng)建數(shù)據(jù)表的一般步驟和方法。案例學(xué)習(xí)目標(biāo)SQLDeveloper的啟動(dòng)、SQLDeveloper的登錄、SQLDeveloper中數(shù)據(jù)類(lèi)型的選擇、SQLDeveloper中創(chuàng)建表的步驟、SQLDeveloper中數(shù)據(jù)表列的操作方法。案例知識(shí)要點(diǎn)課堂案例3——使用SQLDeveloper創(chuàng)建Users表案例完成步驟添加標(biāo)題文字(1)啟動(dòng)SQLDeveloper并建立和Oracle11g數(shù)據(jù)庫(kù)的連接,以指定的方案(如方案名:SCOTT,密碼:123456)登錄SQLDeveloper后。在SQLDeveloper的左邊樹(shù)型結(jié)構(gòu)中,依次選擇“eBuy”、“Tables”,右鍵單擊“Tables”項(xiàng),從快捷菜單中選擇“NewTable”

添加標(biāo)題文字教師演示講解課堂案例3——使用SQLDeveloper創(chuàng)建Users表案例完成步驟添加標(biāo)題文字(2)打開(kāi)“CreateTable”對(duì)話框,指定新建數(shù)據(jù)表的名稱(chēng)(如Users);選擇默認(rèn)的用戶方案(SCOTT)。(3)添加數(shù)據(jù)表列。首先單擊“AddColumn”按鈕,再設(shè)置列的名稱(chēng)、數(shù)據(jù)類(lèi)型、數(shù)據(jù)類(lèi)型的長(zhǎng)度、是否允許列值非空和該列是否為主鍵后,將為新表增加一個(gè)數(shù)據(jù)列。按照這種方法,依次為Users數(shù)據(jù)表添加數(shù)據(jù)列

添加標(biāo)題文字教師演示講解課堂案例3——使用SQLDeveloper創(chuàng)建Users表案例完成步驟添加標(biāo)題文字(4)指定列數(shù)據(jù)類(lèi)型。在SQLDeveloper創(chuàng)建表的普通狀態(tài)下,數(shù)據(jù)列只能選擇VARCHAR2、CLOB、INTEGER、NUMBERt和DATE五種數(shù)據(jù)類(lèi)型,如果要使用更多的數(shù)據(jù)類(lèi)型,請(qǐng)選中Advanced復(fù)選框。(5)單擊“確定”按鈕,完成數(shù)據(jù)表的創(chuàng)建,在SQLDeveloper中的Tables項(xiàng)下將新增Users項(xiàng)。(6)在為數(shù)據(jù)表添加數(shù)據(jù)列之后,選擇“SQL”選項(xiàng)卡,用戶可以查看創(chuàng)建數(shù)據(jù)表的DDL腳本。添加標(biāo)題文字教師演示講解4.3.2使用SQLDeveloper修改表修改表添加標(biāo)題文字在SQLDeveloper左邊欄的Tables項(xiàng)中右擊需要修改的數(shù)據(jù)表,從快捷菜單中選擇“Edit”,將打開(kāi)“EditTable”對(duì)話框,用戶可以完成對(duì)數(shù)據(jù)表的修改操作。修改完成后單擊“確定”按鈕,保存修改結(jié)果。添加標(biāo)題文字教師演示講解

4.3.3使用SQLDeveloper查看和刪除表查看表添加標(biāo)題文字在SQLDeveloper的Tables選項(xiàng)中單擊需要查看的表,在右邊欄內(nèi)將出現(xiàn)該表的詳細(xì)情況,包括該表所屬的列、數(shù)據(jù)、約束、授權(quán)和主鍵等各種信息

。添加標(biāo)題文字教師演示講解

4.3.3使用SQLDeveloper查看和刪除表刪除表添加標(biāo)題文字(1)刪除數(shù)據(jù)表時(shí),首先從Tables項(xiàng)中右擊需要?jiǎng)h除的數(shù)據(jù)表,然后從快捷菜單中依次選擇“Table”和“Drop”

。(2)在打開(kāi)的的刪除對(duì)話框中,單擊“應(yīng)用”按鈕。添加標(biāo)題文字教師演示講解

課堂案例4——使用PL/SQL管理表掌握Oracle中應(yīng)用PL/SQL語(yǔ)句創(chuàng)建數(shù)據(jù)表、修改數(shù)據(jù)表、刪除數(shù)據(jù)表的方法。案例學(xué)習(xí)目標(biāo)

CREATETABLE語(yǔ)句、ALTERTABLE語(yǔ)句、DROPTABLE語(yǔ)句、PL/SQL的執(zhí)行。案例知識(shí)要點(diǎn)課堂案例4——使用PL/SQL管理表案例完成步驟-創(chuàng)建數(shù)據(jù)表添加標(biāo)題文字教師演示講解(1)編寫(xiě)SQL腳本(2)運(yùn)行創(chuàng)建CUSTOMER表的腳本輸入到SQLDeveloper的“EnterSQLStatement”區(qū)域,單擊圖標(biāo)或按F5鍵運(yùn)行腳本,執(zhí)行PL/SQL語(yǔ)句課堂案例4——使用PL/SQL管理表案例完成步驟-修改數(shù)據(jù)表添加標(biāo)題文字教師演示講解1.添加列【例4-2】考慮到需要了解商品的生產(chǎn)廠商的信息,要在SCOTT用戶方案的GOODS表中添加一個(gè)長(zhǎng)度為20個(gè)字符,名稱(chēng)為g_Producer,類(lèi)型為varchar的新的一列。ALTERTABLESCOTT.GOODSADDg_Producervarchar(20)課堂案例4——使用PL/SQL管理表案例完成步驟-修改數(shù)據(jù)表添加標(biāo)題文字教師演示講解2.修改列【例4-3】考慮到出生日期的實(shí)際長(zhǎng)度和數(shù)據(jù)操作的方便性,要將SCOTT用戶方案中的GOODS表中的g_ProduceDate數(shù)據(jù)類(lèi)型改為char型,且寬度為10。ALTERTABLESCOTT.GOODSMODIFYg_ProduceDatechar(10)課堂案例4——使用PL/SQL管理表案例完成步驟-修改數(shù)據(jù)表添加標(biāo)題文字教師演示講解3.刪除列使用ALTERTABLE語(yǔ)句刪除列時(shí),可以使用DROPCOLUMN關(guān)鍵字。【例4-4】如果不考慮商品的生產(chǎn)廠商信息,要在SCOTT用戶方案中的GOODS表中刪除已有列g(shù)_Producer。ALTERTABLESCOTT.GOODSDROPCOLUMNg_Producer使用ALTERTABLESCOTT.GOODSCASCADE;可以刪除與指定列相關(guān)聯(lián)的約束課堂案例4——使用PL/SQL管理表案例完成步驟-查看刪除表添加標(biāo)題文字教師演示講解1.查看表【例4-5】使用DESCRIBE命令查看用戶方案SCOTT下的商品表USERS。DESCRIBESCOTT.Users;2.刪除表使用PL/SQL刪除表的基本語(yǔ)法格式為:DROPTABLE[用戶方案.]<表名>;【例4-6】使用DROPTABLE命令刪除用戶方案為SCOTT下的商品表GOODS。DROPTABLESCOTT.GOODS;【例4-7】使用DROPTABLE命令刪除用戶方案SCOTT中的商品表GOODS,并刪除商品表的所有外鍵約束。DROPTABLESCOTT.GOODS CASCADECONSTRAINS;課堂案例5——使用SQLDeveloper操作數(shù)據(jù)記錄掌握在SQLDeveloper中操作數(shù)據(jù)記錄的方式。案例學(xué)習(xí)目標(biāo)在SQLDeveloper中添加數(shù)據(jù)、在SQLDeveloper中修改數(shù)據(jù)、在SQLDeveloper中刪除數(shù)據(jù)。案例知識(shí)要點(diǎn)課堂案例5——使用SQLDeveloper操作數(shù)據(jù)記錄案例完成步驟添加標(biāo)題文字教師演示講解課堂案例6——使用PL/SQL操作數(shù)據(jù)記錄學(xué)習(xí)使用PL/SQL語(yǔ)句插入記錄、修改記錄和刪除記錄的語(yǔ)句。案例學(xué)習(xí)目標(biāo)INSERT語(yǔ)句插入記錄、UPDATE語(yǔ)句修改記錄、DELETE語(yǔ)句刪除記錄。案例知識(shí)要點(diǎn)課堂案例6——使用PL/SQL操作數(shù)據(jù)記錄案例完成步驟添加標(biāo)題文字教師演示講解1.插入數(shù)據(jù)記錄在PL/SQL中,使用INSERTINTO語(yǔ)句實(shí)現(xiàn)在表中插入數(shù)據(jù)記錄的操作,其語(yǔ)法格式為:INSERTINTO[用戶方案].<表>[(<列1>[,<列2>…])]VALUES(<值1>[,<值2>…]);(1)插入所有列(2)插入指定列課堂案例6——使用PL/SQL操作數(shù)據(jù)記錄案例完成步驟添加標(biāo)題文字教師演示講解2.更新數(shù)據(jù)記錄在PL/SQL中,使用UPDATE語(yǔ)句實(shí)現(xiàn)更新表中數(shù)據(jù)記錄的操作,其語(yǔ)法格式為:UPDATE[用戶方案].<表>SET<列1>=<表達(dá)式1>[,<列2>=<表達(dá)式2>…][WHERE條件表達(dá)式];(1)修改單條記錄(2)修改多條記錄課堂案例6——使用PL/SQL操作數(shù)據(jù)記錄案例完成步驟添加標(biāo)題文字教師演示講解3.刪除數(shù)據(jù)記錄在PL/SQL中,使用DELETEFROM語(yǔ)句實(shí)現(xiàn)刪除表中數(shù)據(jù)記錄的操作,其語(yǔ)法格式為:DELETE[FROM][用戶方案].<表>[WHERE條件表達(dá)式;](1)刪除指定記錄

(2)刪除所有記錄PL/SQl簡(jiǎn)介PL/SQL是過(guò)程語(yǔ)言(ProceduralLanguage)與結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)結(jié)合而成的編程語(yǔ)言PL/SQL是對(duì)SQL的擴(kuò)展支持多種數(shù)據(jù)類(lèi)型,如大對(duì)象和集合類(lèi)型,可使用條件和循環(huán)等控制結(jié)構(gòu)可用于創(chuàng)建存儲(chǔ)過(guò)程、觸發(fā)器和程序包,給SQL語(yǔ)句的執(zhí)行添加程序邏輯與Oracle服務(wù)器和Oracle工具緊密集成,具備可移植性、靈活性和安全性支持SQL,在PL/SQL中可以使用:數(shù)據(jù)操縱命令事務(wù)控制命令游標(biāo)控制SQL函數(shù)和SQL運(yùn)算符支持面向?qū)ο缶幊?OOP)可移植性,可運(yùn)行在任何操作系統(tǒng)和平臺(tái)上的Oralce數(shù)據(jù)庫(kù)更佳的性能,PL/SQL經(jīng)過(guò)編譯執(zhí)行安全性,可以通過(guò)存儲(chǔ)過(guò)程限制用戶對(duì)數(shù)據(jù)的訪問(wèn)用戶將整個(gè)語(yǔ)句塊發(fā)送給OracleOracleProcedureBegin

ProcedureCallSQLCommand

…EndPL/SQL引擎駐留在Oracle服務(wù)器中該引擎接受PL/SQL塊并對(duì)其進(jìn)行編譯執(zhí)行將PL/SQL塊發(fā)送給Oracle服務(wù)器用戶執(zhí)行過(guò)程語(yǔ)句引擎將SQL語(yǔ)句發(fā)送給SQL語(yǔ)句執(zhí)行器Oracle服務(wù)器PL/SQL引擎SQL

語(yǔ)句

執(zhí)行器過(guò)程語(yǔ)句

執(zhí)行器執(zhí)行SQL語(yǔ)句將結(jié)果發(fā)送給用戶使用PL/SQL編程常量和變量--常量常量是指在程序運(yùn)行期間其值不能改變的量。

【例5-1】定義常量PI(3.14159)。--設(shè)置打開(kāi)控制臺(tái)輸出SETSERVEROUTPUTON--聲明一個(gè)變量或常量DECLAREPICONSTANTNUMBER(6,5):=3.14159;BEGIN--輸出指定變量或常量的值

DBMS_OUTPUT.PUT_LINE('PI='||PI);END;

其中,PUT_LINE過(guò)程中使用的“||”用于連接輸出內(nèi)容的兩部分

課堂案例1——使用PL/SQL編程常量和變量--變量變量是指由程序讀取或賦值的存儲(chǔ)單元,用于臨時(shí)存儲(chǔ)數(shù)據(jù),變量中的數(shù)據(jù)可以隨著程序的運(yùn)行而發(fā)生變化。每個(gè)變量都必須有一個(gè)特定的數(shù)據(jù)類(lèi)型,可以是系統(tǒng)數(shù)據(jù)類(lèi)型,也可以是自定義數(shù)據(jù)類(lèi)型。

【例5-2】編寫(xiě)計(jì)算圓面積的PL/SQL塊。SETSERVEROUTPUTONDECLAREPICONSTANTNUMBER(6,5):=3.14159;--聲明兩個(gè)變量并賦初值

v_radiuFLOAT:=2;v_areaFLOAT;BEGINv_area:=PI*v_radiu*v_radiu;DBMS_OUTPUT.PUT_LINE('Area='||v_area);END;課堂案例1——使用PL/SQL編程條件結(jié)構(gòu)-IF結(jié)構(gòu)【例5-3】使用簡(jiǎn)單IF結(jié)構(gòu)判斷一個(gè)整數(shù)的奇偶性。SETSERVEROUTPUTONDECLAREv_numberINTEGER:=518;BEGIN

IFMOD(v_number,2)=0THENDBMS_OUTPUT.PUT_LINE(v_number||'是一個(gè)偶數(shù)');

ELSEDBMS_OUTPUT.PUT_LINE(v_number||'是一個(gè)奇數(shù)');ENDIF;END;課堂案例1——使用PL/SQL編程條件結(jié)構(gòu)-IF結(jié)構(gòu)【例5-4】使用復(fù)雜IF結(jié)構(gòu)輸出3個(gè)整數(shù)之中的最大者。課堂案例1——使用PL/SQL編程條件結(jié)構(gòu)-CASE結(jié)構(gòu)【例5-5】使用單一選擇符進(jìn)行等值比較的CASE結(jié)構(gòu)將百分制成績(jī)轉(zhuǎn)換為5分制成績(jī)。課堂案例1——使用PL/SQL編程條件結(jié)構(gòu)-CASE結(jié)構(gòu)【例5-6】使用多種條件進(jìn)行非等值比較的CASE結(jié)構(gòu)將百分制成績(jī)轉(zhuǎn)換為5分制成績(jī)。課堂案例1——使用PL/SQL編程循環(huán)結(jié)構(gòu)-While循環(huán)【例5-7】使用WHILE循環(huán)求1到100的所有正整數(shù)之和。SETSERVEROUTPUTONDECLARE iINTEGER:=1; sINTEGER:=0;BEGIN

WHILEi<=100LOOP s:=s+i; i:=i+1;

ENDLOOP; DBMS_OUTPUT.PUT_LINE('1+2+...+100='||s);END;課堂案例1——使用PL/SQL編程循環(huán)結(jié)構(gòu)-Loop循環(huán)【例5-8】使用LOOP循環(huán)求1到100的所有正整數(shù)之和。SETSERVEROUTPUTONDECLARE iINTEGER:=1; sINTEGER:=0;BEGIN

LOOP s:=s+i; i:=i+1; EXITWHENi>100;

ENDLOOP; DBMS_OUTPUT.PUT_LINE('1+2+...+100='||s);END;課堂案例1——使用PL/SQL編程循環(huán)結(jié)構(gòu)-For循環(huán)使用FOR循環(huán)不需要顯式聲明循環(huán)控制變量的類(lèi)型,而由PL/SQL隱式提供。默認(rèn)情況下,循環(huán)控制變量從下限值開(kāi)始,每次循環(huán)結(jié)束后自動(dòng)增加1,直至超過(guò)上限值為止;若指定REVERSE參數(shù),則循環(huán)控制變量從上限值開(kāi)始,每次循環(huán)結(jié)束后自動(dòng)減1,直至低于下限值為止。

課堂案例1——使用PL/SQL編程循環(huán)結(jié)構(gòu)-For循環(huán)【例5-9】使用不帶REVERSE參數(shù)的FOR循環(huán)求1到100的所有正整數(shù)之和?!纠?-10】使用帶REVERSE參數(shù)的FOR循環(huán)求1到100的所有正整數(shù)之和。課堂案例1——使用PL/SQL編程循環(huán)結(jié)構(gòu)-跳轉(zhuǎn)語(yǔ)句【例5-11】借助于GOTO跳轉(zhuǎn)語(yǔ)句輸出10以?xún)?nèi)第一個(gè)能同時(shí)被2和3整除的正整數(shù)。SETSERVEROUTPUTONDECLAREnumINTEGER:=1;BEGINWHILEnum<=10LOOPIFMOD(num,2)=0ANDMOD(num,3)=0THEN

GOTOdisplay;ENDIF;num:=num+1;ENDLOOP;<<display>> DBMS_OUTPUT.PUT_LINE(num);END;課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-數(shù)學(xué)函數(shù)課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-數(shù)學(xué)函數(shù)【例5-12】測(cè)試常用數(shù)學(xué)函數(shù)的用法。SETSERVEROUTPUTONBEGINDBMS_OUTPUT.PUT_LINE('-8的絕對(duì)值為'||ABS(-8));DBMS_OUTPUT.PUT_LINE('8的3次冪為'||POWER(8,3));DBMS_OUTPUT.PUT_LINE('8的平方根為'||SQRT(8));DBMS_OUTPUT.PUT_LINE('3.14159四舍五入到小數(shù)點(diǎn)后3位為'||ROUND(3.14159,3));DBMS_OUTPUT.PUT_LINE('e='||EXP(1));DBMS_OUTPUT.PUT_LINE('大于或等于-32.5的最小整數(shù)為'||CEIL(-32.5));DBMS_OUTPUT.PUT_LINE('小于或等于-32.5的最大整數(shù)為'||FLOOR(-32.5));END;課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-字符串函數(shù)課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-字符串函數(shù)【例5-13】測(cè)試常用字符串函數(shù)的用法。SETSERVEROUTPUTONBEGINDBMS_OUTPUT.PUT_LINE('a的ACSCII值為'||ASCII('a'));DBMS_OUTPUT.PUT_LINE('ACSCII值97對(duì)應(yīng)的字符為'||CHR(97));DBMS_OUTPUT.PUT_LINE('字符串"HunanRailway"的長(zhǎng)度為'||LENGTH('HunanRailway'));DBMS_OUTPUT.PUT_LINE('將字符串"HunanRailway"全部轉(zhuǎn)換為大寫(xiě)形式為'||UPPER('HunanRailway'));DBMS_OUTPUT.PUT_LINE('將字符串"HunanRailway"全部轉(zhuǎn)換為小寫(xiě)形式為'||LOWER('HunanRailway'));END;課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-日期函數(shù)課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-日期函數(shù)【例5-14】測(cè)試常用日期函數(shù)的用法。SETSERVEROUTPUTONBEGINDBMS_OUTPUT.PUT_LINE('當(dāng)前日期時(shí)間為'||SYSDATE);DBMS_OUTPUT.PUT_LINE('當(dāng)前月份的最后一天的日期為'||LAST_DAY(SYSDATE));DBMS_OUTPUT.PUT_LINE('字符串對(duì)應(yīng)日期'||TO_DATE('2007-5-24','YYYY-MM-DD'));DBMS_OUTPUT.PUT_LINE('兩個(gè)日期相差的月份'||MONTHS_BETWEEN('14-4月-99',SYSDATE));END;課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-轉(zhuǎn)換函數(shù)課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-轉(zhuǎn)換函數(shù)【例5-15】測(cè)試常用轉(zhuǎn)換函數(shù)的用法。SETSERVEROUTPUTONBEGINDBMS_OUTPUT.PUT_LINE('轉(zhuǎn)換為數(shù)據(jù)庫(kù)字符集的ASCII字符串為'||ASCIISTR('湖南鐵道'));DBMS_OUTPUT.PUT_LINE('將當(dāng)前日期轉(zhuǎn)換為字符串類(lèi)型數(shù)據(jù)為'||CAST(SYSDATEASVARCHAR2));DBMS_OUTPUT.PUT_LINE('將字符串轉(zhuǎn)換為ROWID數(shù)據(jù)類(lèi)型為'||CHARTOROWID('AAAAFdl/#$'));DBMS_OUTPUT.PUT_LINE('字符集轉(zhuǎn)換'||CONVERT('湖南鐵道','US7ASCII','WE8ISO8859P1'));END;課堂案例1——使用PL/SQL編程%TYPE變量Oracle9i以后的版本提供了%TYPE定義方法。這樣當(dāng)數(shù)據(jù)表的字段類(lèi)型修改后,PL/SQL程序中相應(yīng)變量的類(lèi)型也自動(dòng)修改?!纠?-16】使用%TYPE獲取查詢(xún)的商品的基本信息。SETSERVEROUTPUTONDECLARE

v_gIdGoods.g_ID%TYPE;v_gNameGoods.g_Name%TYPE;v_gPriceGoods.g_Price%TYPE;v_gNumberGoods.g_Number%TYPE;BEGINSELECTg_ID,g_Name,g_Price,g_NumberINTOv_gId,v_gName,v_gPrice,v_gNumberFROMSCOTT.GoodsWHEREg_ID='010003';dbms_output.put_line(v_gId||'/'||v_gName||'/'||v_gPrice||'/'||v_gNumber);END;

課堂案例1——使用PL/SQL編程%ROWTYPE變量與%TYPE類(lèi)型類(lèi)似,也可以在不確定查詢(xún)列的類(lèi)型的情況下,使用%ROWTYPE類(lèi)型的變量存儲(chǔ)查詢(xún)的一行數(shù)據(jù)

?!纠?-17】使用%ROWTYPE獲取查詢(xún)的商品基本信息。SETSERVEROUTPUTONDECLARE

v_GoodRecordGoods%ROWTYPE;BEGINSELECT*INTOv_GoodRecordFROMSCOTT.GoodsWHEREg_ID='010003';dbms_output.put_line(v_GoodRecord.g_ID);dbms_output.put_line(v_GoodRecord.g_Name);dbms_output.put_line(v_GoodRecord.g_Price);dbms_output.put_line(v_GoodRecord.g_Number);END;課堂案例1——使用PL/SQL編程異常處理為了提高應(yīng)用程序的健壯性,開(kāi)發(fā)人員必須考慮程序可能出現(xiàn)的各種錯(cuò)誤,并進(jìn)行相應(yīng)的處理。在Oracle中,為了處理PL/SQL應(yīng)用程序的各種錯(cuò)誤,Oracle提供了三種類(lèi)型的異常。(1)預(yù)定義異常:用于處理常見(jiàn)的Oracle錯(cuò)誤(2)非預(yù)定義異常:用于處理預(yù)定義異常所不能處理的Oracle錯(cuò)誤(3)自定義異常:用于處理于Oracle錯(cuò)誤無(wú)關(guān)的其他情況課堂案例1——使用PL/SQL編程異常處理—系統(tǒng)預(yù)定義異常課堂案例1——使用PL/SQL編程異常處理—系統(tǒng)預(yù)定義異常【例5-18】對(duì)Goods表中的插入的重復(fù)商品號(hào)進(jìn)行異常處理(使用預(yù)定義異常)。SETSERVEROUTPUTONBEGININSERTINTOSCOTT.GoodsVALUES('010001','諾基亞6700Slide','01',1500,0.9,20,to_date('2009-06-01','yyyy-mm-dd'),'pImage/010001.gif','熱點(diǎn)','彩屏,1600萬(wàn)色,TFT,240×320像素,2.2英寸');EXCEPTIONWHENDUP_VAL_ON_INDEXTHENdbms_output.put_line('捕獲到DUP_VAL_ON_INDEX異常');dbms_output.put_line('重復(fù)的商品編號(hào)');END;課堂案例1——使用PL/SQL編程異常處理—非預(yù)定義異常使用非預(yù)定義異常需要包括以下三個(gè)步驟:(1)在定義部分定義異常名;(2)在異常和Oracle錯(cuò)誤之間建立關(guān)聯(lián)(需要使用偽過(guò)程EXCEPTION_INIT);(3)在異常處理部分捕捉并處理異常。【例5-19】刪除商品類(lèi)別表,并處理ORA-2292錯(cuò)誤(使用非預(yù)定義異常)。SETSERVEROUTPUTONDECLAREe_FKEXCEPTION;--1、定義部分

PRAGMAEXCEPTION_INIT(e_FK,-2292);--2、建立關(guān)聯(lián)關(guān)系BEGINDELETESCOTT.TypesWHEREt_Name='通信商品';EXCEPTIONWHENe_FKTHEN--3、捕捉處理

DBMS_OUTPUT.PUT_LINE('該類(lèi)別已被使用');END;課堂案例1——使用PL/SQL編程異常處理—自定義異常使用自定義異常時(shí),需要包括以下三個(gè)步驟:(1)需要在定義部分(DECLARE)定義異常;(2)再執(zhí)行部分(BEGIN)觸發(fā)異常(使用RAISE語(yǔ)句);(3)在異常處理部分(EXCEPTION)捕捉并處理異常。

7.2存儲(chǔ)過(guò)程概述視圖特點(diǎn)在Oracle中,可以在數(shù)據(jù)庫(kù)中定義子程序,在子程序中將一些固定的操作集中起來(lái),由Oracle數(shù)據(jù)庫(kù)服務(wù)器完成,以完成某個(gè)特定的功能。這種子程序稱(chēng)為存儲(chǔ)過(guò)程(Proce-Dure)。使用存儲(chǔ)過(guò)程具有如下的優(yōu)點(diǎn):(1)存儲(chǔ)過(guò)程在服務(wù)器端運(yùn)行,執(zhí)行速度快;(2)存儲(chǔ)過(guò)程執(zhí)行一次后駐留在Oracle數(shù)據(jù)庫(kù)服務(wù)器的高速Cache中,以后再次執(zhí)行存儲(chǔ)過(guò)程時(shí),只需從高速Cache中調(diào)用已經(jīng)編譯好的代碼即可,從而提高了系統(tǒng)性能;(3)存儲(chǔ)過(guò)程確保了數(shù)據(jù)庫(kù)的安全。使用存儲(chǔ)過(guò)程,可以在禁止用戶直接訪問(wèn)應(yīng)用程序中的某些數(shù)據(jù)表的情況下,授權(quán)執(zhí)行訪問(wèn)這些數(shù)據(jù)表的存儲(chǔ)過(guò)程。(4)自動(dòng)完成需要預(yù)先執(zhí)行的任務(wù)。存儲(chǔ)過(guò)程可以設(shè)置為系統(tǒng)啟動(dòng)時(shí)自動(dòng)執(zhí)行,而不必在系統(tǒng)啟動(dòng)后再進(jìn)行手動(dòng)操作,從而方便了用戶的使用,可以自動(dòng)完成一些需要預(yù)先執(zhí)行的任務(wù)。4.6.1數(shù)據(jù)完整性概述概述添加標(biāo)題文字?jǐn)?shù)據(jù)完整性是指數(shù)據(jù)的精確性和可靠性。它是為防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義規(guī)定的數(shù)據(jù)和防止因錯(cuò)誤信息的輸入輸出造成無(wú)效操作或錯(cuò)誤信息而提出的。數(shù)據(jù)完整性主要分為4類(lèi):域完整性、實(shí)體完整性、引用完整性和用戶定義完整性。1.域完整性域完整性是指數(shù)據(jù)庫(kù)表中的列必須滿足某種特定的數(shù)據(jù)類(lèi)型或約束,其中約束又包括取值范圍精度等規(guī)定。表中的CHECK、FOREIGNKEY約束和DEFAULT、NOTNULL定義都屬于域完整性的范疇。2.實(shí)體完整性實(shí)體完整性規(guī)定表的每一行在表中是唯一的。實(shí)體表中定義的UNIQUE、PRIMARYKEY和IDENTITY約束就是實(shí)體完整性的體現(xiàn)。4.6.1數(shù)據(jù)完整性概述概述添加標(biāo)題文字3.引用完整性引用完整性是指兩個(gè)表的主關(guān)鍵字和外關(guān)鍵字的數(shù)據(jù)應(yīng)對(duì)應(yīng)一致。它確保了有主關(guān)鍵字的表中對(duì)應(yīng)其他表的外關(guān)鍵字的行存在,即保證了表之間的數(shù)據(jù)的一致性,防止了數(shù)據(jù)丟失或無(wú)意義的數(shù)據(jù)在數(shù)據(jù)庫(kù)中擴(kuò)散。引用完整性作用表現(xiàn)在如下幾個(gè)方面:禁止在從表中插入包含主表中不存在的關(guān)鍵字的數(shù)據(jù)行;禁止會(huì)導(dǎo)致從表中的相應(yīng)值孤立的主表中的外關(guān)鍵字值改變;禁止刪除在從表中有對(duì)應(yīng)記錄的主表記錄。4.用戶定義完整性用戶定義完整性指的是由用戶指定的一組規(guī)則,它不屬于實(shí)體完整性、域完整性或引用完整性。

課堂案例7——數(shù)據(jù)完整性與約束學(xué)習(xí)在Oracle中使用OEM和PL/SQL語(yǔ)句實(shí)現(xiàn)各類(lèi)約束以實(shí)現(xiàn)數(shù)據(jù)完整性的方法和操作步驟

。案例學(xué)習(xí)目標(biāo)管理NOTNULL約束、管理DEFAULT約束、管理UNIQUE約束、管理CHECK約束、管理PRIMARYKEY約束、管理FOREIGNKEY約束

。案例知識(shí)要點(diǎn)課堂案例7——數(shù)據(jù)完整性與約束案例完成步驟-非空約束添加標(biāo)題文字教師演示講解非空約束說(shuō)明列值不允許為空(NULL),當(dāng)插入或修改數(shù)據(jù)時(shí),設(shè)置了非空約束的列的值不允許為空,它必須存在具體的值,如商品編號(hào)、商品名稱(chēng)必須為非空。如果沒(méi)有為列創(chuàng)建非空約束,則該列默認(rèn)為允許空值。非空約束可以通過(guò)OEM或PL/SQL創(chuàng)建。課堂案例7——數(shù)據(jù)完整性與約束案例完成步驟-默認(rèn)約束添加標(biāo)題文字教師演示講解默認(rèn)約束是指表中添加新行時(shí)給表中某一列指定的默認(rèn)值。使用默認(rèn)約束一是可以避免不允許為空值的數(shù)據(jù)錯(cuò)誤,二是可以加快用戶的輸入速度。默認(rèn)約束可以通過(guò)OEM或PL/SQL創(chuàng)建。如果創(chuàng)建了稱(chēng)為“默認(rèn)值”的對(duì)象。當(dāng)綁定到列或用戶定義數(shù)據(jù)類(lèi)型時(shí),如果插入時(shí)沒(méi)有明確提供值,默認(rèn)值便指定一個(gè)值,并將其插入到對(duì)象所綁定的列中

。課堂案例7——數(shù)據(jù)完整性與約束案例完成步驟-默認(rèn)約束添加標(biāo)題文字教師演示講解默認(rèn)約束是指表中添加新行時(shí)給表中某一列指定的默認(rèn)值。使用默認(rèn)約束一是可以避免不允許為空值的數(shù)據(jù)錯(cuò)誤,二是可以加快用戶的輸入速度。默認(rèn)約束可以通過(guò)OEM或PL/SQL創(chuàng)建。c_Genderchar(2)DEFAULT'女', --性別

課堂案例7——數(shù)據(jù)完整性與約束案例完成步驟-唯一約束添加標(biāo)題文字教師演示講解唯一約束通過(guò)確保在列中不輸入重復(fù)值保證一列或多列的實(shí)體完整性,每個(gè)唯一約束要?jiǎng)?chuàng)建一個(gè)唯一索引。對(duì)于實(shí)施唯一約束的列,不允許有任意兩行具有相同的索引值。如商品編號(hào)是唯一的,這樣才能唯一地確定一種商品。與主鍵約束不同的是,Oracle允許為一個(gè)表創(chuàng)建多個(gè)唯一約束。唯一約束可以通過(guò)OEM或PL/SQL創(chuàng)建

。CONSTRAINT約束名UNIQUE(列);課堂案例7——數(shù)據(jù)完整性與約束案例完成步驟-檢查約束添加標(biāo)題文字教師演示講解檢查約束限制輸入到一列或多列中的可能值,從而保證Oracle數(shù)據(jù)庫(kù)中數(shù)據(jù)的域完整性。檢查約束實(shí)際上定義了一種輸入驗(yàn)證規(guī)則,表示一個(gè)列的輸入內(nèi)容必須符合該列的檢查約束條件,如果輸入內(nèi)容不符合規(guī)則,則數(shù)據(jù)輸入無(wú)效。如商品數(shù)量必須定義在[0,100]之間,輸入的任何商品的數(shù)量都必須符合此規(guī)則,否則這樣的數(shù)據(jù)記錄不會(huì)被插入到商品表中。

課堂案例7——數(shù)據(jù)完整性與約束案例完成步驟-主鍵約束添加標(biāo)題文字教師演示講解主鍵約束主要用于實(shí)現(xiàn)實(shí)體完整性,對(duì)于指定了主鍵約束的列,要求表中的每一行有一個(gè)唯一的標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符就是主鍵。主鍵約束實(shí)際上是通過(guò)創(chuàng)建唯一索引來(lái)保證指定列的實(shí)體完整性的。主鍵約束可以應(yīng)用于表中一列或多列(復(fù)合主鍵)

。

課堂案例7——數(shù)據(jù)完整性與約束案例完成步驟-外鍵約束添加標(biāo)題文字教師演示講解外鍵約束為表中一列或多列數(shù)據(jù)提供引用完整性,它限制插入到表中被約束列的值必須在被引用表中已經(jīng)存在。實(shí)施外鍵約束時(shí),要求在被引用表中定義了主鍵約束或唯一約束。被引用表被稱(chēng)為主表,主表中的主鍵稱(chēng)為引用完整性中的主鍵,必須引用主表進(jìn)行引用完整性約束

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論