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

下載本文檔

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

文檔簡介

第4講數(shù)據(jù)表操作本章學(xué)習(xí)導(dǎo)航本章學(xué)習(xí)導(dǎo)航本章學(xué)習(xí)要點(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ù)庫概述數(shù)據(jù)表基礎(chǔ)數(shù)據(jù)表(Table)是數(shù)據(jù)在Oracle數(shù)據(jù)庫中的邏輯存儲單元,按指定關(guān)系模式將數(shù)據(jù)存儲在對應(yīng)的數(shù)據(jù)表中。4.1數(shù)據(jù)庫概述Oracle基本數(shù)據(jù)類型數(shù)據(jù)類型的作用在于指明存儲數(shù)值時需要占據(jù)的內(nèi)存空間大小和進(jìn)行運算的依據(jù)。Oracle的數(shù)據(jù)類型分為標(biāo)量(Scalar)類型、復(fù)合(Composite)類型、引用(Reference)類型和LOB(LargeObject)類型4種類型

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ProcedureCallSQLCommand

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

語句

執(zhí)行器過程語句

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

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

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

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

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

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

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】使用簡單IF結(jié)構(gòu)判斷一個整數(shù)的奇偶性。SETSERVEROUTPUTONDECLAREv_numberINTEGER:=518;BEGIN

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

ELSEDBMS_OUTPUT.PUT_LINE(v_number||'是一個奇數(shù)');ENDIF;END;課堂案例1——使用PL/SQL編程條件結(jié)構(gòu)-IF結(jié)構(gòu)【例5-4】使用復(fù)雜IF結(jié)構(gòu)輸出3個整數(shù)之中的最大者。課堂案例1——使用PL/SQL編程條件結(jié)構(gòu)-CASE結(jié)構(gòu)【例5-5】使用單一選擇符進(jìn)行等值比較的CASE結(jié)構(gòu)將百分制成績轉(zhuǎn)換為5分制成績。課堂案例1——使用PL/SQL編程條件結(jié)構(gòu)-CASE結(jié)構(gòu)【例5-6】使用多種條件進(jìn)行非等值比較的CASE結(jié)構(gòu)將百分制成績轉(zhuǎn)換為5分制成績。課堂案例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)控制變量的類型,而由PL/SQL隱式提供。默認(rèn)情況下,循環(huán)控制變量從下限值開始,每次循環(huán)結(jié)束后自動增加1,直至超過上限值為止;若指定REVERSE參數(shù),則循環(huán)控制變量從上限值開始,每次循環(huán)結(jié)束后自動減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)語句【例5-11】借助于GOTO跳轉(zhuǎn)語句輸出10以內(nèi)第一個能同時被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】測試常用數(shù)學(xué)函數(shù)的用法。SETSERVEROUTPUTONBEGINDBMS_OUTPUT.PUT_LINE('-8的絕對值為'||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ù)點后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】測試常用字符串函數(shù)的用法。SETSERVEROUTPUTONBEGINDBMS_OUTPUT.PUT_LINE('a的ACSCII值為'||ASCII('a'));DBMS_OUTPUT.PUT_LINE('ACSCII值97對應(yīng)的字符為'||CHR(97));DBMS_OUTPUT.PUT_LINE('字符串"HunanRailway"的長度為'||LENGTH('HunanRailway'));DBMS_OUTPUT.PUT_LINE('將字符串"HunanRailway"全部轉(zhuǎn)換為大寫形式為'||UPPER('HunanRailway'));DBMS_OUTPUT.PUT_LINE('將字符串"HunanRailway"全部轉(zhuǎn)換為小寫形式為'||LOWER('HunanRailway'));END;課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-日期函數(shù)課堂案例1——使用PL/SQL編程常用系統(tǒng)函數(shù)-日期函數(shù)【例5-14】測試常用日期函數(shù)的用法。SETSERVEROUTPUTONBEGINDBMS_OUTPUT.PUT_LINE('當(dāng)前日期時間為'||SYSDATE);DBMS_OUTPUT.PUT_LINE('當(dāng)前月份的最后一天的日期為'||LAST_DAY(SYSDATE));DBMS_OUTPUT.PUT_LINE('字符串對應(yīng)日期'||TO_DATE('2007-5-24','YYYY-MM-DD'));DBMS_OUTPUT.PUT_LINE('兩個日期相差的月份'||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】測試常用轉(zhuǎn)換函數(shù)的用法。SETSERVEROUTPUTONBEGINDBMS_OUTPUT.PUT_LINE('轉(zhuǎn)換為數(shù)據(jù)庫字符集的ASCII字符串為'||ASCIISTR('湖南鐵道'));DBMS_OUTPUT.PUT_LINE('將當(dāng)前日期轉(zhuǎn)換為字符串類型數(shù)據(jù)為'||CAST(SYSDATEASVARCHAR2));DBMS_OUTPUT.PUT_LINE('將字符串轉(zhuǎn)換為ROWID數(shù)據(jù)類型為'||CHARTOROWID('AAAAFdl/#$'));DBMS_OUTPUT.PUT_LINE('字符集轉(zhuǎn)換'||CONVERT('湖南鐵道','US7ASCII','WE8ISO8859P1'));END;課堂案例1——使用PL/SQL編程%TYPE變量Oracle9i以后的版本提供了%TYPE定義方法。這樣當(dāng)數(shù)據(jù)表的字段類型修改后,PL/SQL程序中相應(yīng)變量的類型也自動修改。【例5-16】使用%TYPE獲取查詢的商品的基本信息。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類型類似,也可以在不確定查詢列的類型的情況下,使用%ROWTYPE類型的變量存儲查詢的一行數(shù)據(jù)

?!纠?-17】使用%ROWTYPE獲取查詢的商品基本信息。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)用程序的健壯性,開發(fā)人員必須考慮程序可能出現(xiàn)的各種錯誤,并進(jìn)行相應(yīng)的處理。在Oracle中,為了處理PL/SQL應(yīng)用程序的各種錯誤,Oracle提供了三種類型的異常。(1)預(yù)定義異常:用于處理常見的Oracle錯誤(2)非預(yù)定義異常:用于處理預(yù)定義異常所不能處理的Oracle錯誤(3)自定義異常:用于處理于Oracle錯誤無關(guān)的其他情況課堂案例1——使用PL/SQL編程異常處理—系統(tǒng)預(yù)定義異常課堂案例1——使用PL/SQL編程異常處理—系統(tǒng)預(yù)定義異?!纠?-18】對Goods表中的插入的重復(fù)商品號進(jìn)行異常處理(使用預(yù)定義異常)。SETSERVEROUTPUTONBEGININSERTINTOSCOTT.GoodsVALUES('010001','諾基亞6700Slide','01',1500,0.9,20,to_date('2009-06-01','yyyy-mm-dd'),'pImage/010001.gif','熱點','彩屏,1600萬色,TFT,240×320像素,2.2英寸');EXCEPTIONWHENDUP_VAL_ON_INDEXTHENdbms_output.put_line('捕獲到DUP_VAL_ON_INDEX異常');dbms_output.put_line('重復(fù)的商品編號');END;課堂案例1——使用PL/SQL編程異常處理—非預(yù)定義異常使用非預(yù)定義異常需要包括以下三個步驟:(1)在定義部分定義異常名;(2)在異常和Oracle錯誤之間建立關(guān)聯(lián)(需要使用偽過程EXCEPTION_INIT);(3)在異常處理部分捕捉并處理異常?!纠?-19】刪除商品類別表,并處理ORA-2292錯誤(使用非預(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('該類別已被使用');END;課堂案例1——使用PL/SQL編程異常處理—自定義異常使用自定義異常時,需要包括以下三個步驟:(1)需要在定義部分(DECLARE)定義異常;(2)再執(zhí)行部分(BEGIN)觸發(fā)異常(使用RAISE語句);(3)在異常處理部分(EXCEPTION)捕捉并處理異常。

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

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

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

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

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

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

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

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

。

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論