2021年電大Oracle數(shù)據(jù)庫編程形考任務6答案_第1頁
2021年電大Oracle數(shù)據(jù)庫編程形考任務6答案_第2頁
2021年電大Oracle數(shù)據(jù)庫編程形考任務6答案_第3頁
2021年電大Oracle數(shù)據(jù)庫編程形考任務6答案_第4頁
2021年電大Oracle數(shù)據(jù)庫編程形考任務6答案_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2021年國家開放大學電大Oracle數(shù)據(jù)庫編程形考任務6答案

形考任務6作業(yè)

簡述什么是PL/SQL及其主要特性。

認識PL/SQL

***PL/SQL的使用幾乎貫穿于整個Oracle的學習過程,也是作為一個初級開發(fā)人員必須掌握的重要知識點。

***結(jié)構(gòu)化查詢語言(SQL)是用來訪問和操作關(guān)系壟費解的一種標準通用語言,它屬于第四代語言(4GL),

簡單易學,使用它可以很方便地調(diào)用相應的語句來取得結(jié)果。該語言的特點就是推過程化。也就是說,使用

的時候不用指明執(zhí)行的具體方法和途徑,即不用關(guān)注任何的實現(xiàn)細節(jié)。但這種語言也有一個問題,就是好

些情況下滿足不了復雜業(yè)務流程的需求,這就是第四代語言的不足之處。

Oracle中的PL/SQL語言正是為了解決這一問題,PL/SQL屬于第三代的語言(3GL),也就是過程化的語言,

同Java、C#一樣可以關(guān)注細節(jié),用它可以實現(xiàn)復雜的業(yè)務邏輯,是數(shù)據(jù)庫開發(fā)人員的利器。

***PL/SQL是Oracle公司在標準SQL語言基礎(chǔ)上進行擴展而形成的一種可以在數(shù)據(jù)庫上進行設(shè)計變成的語言,

通過Oracle的PL/SQL引擎執(zhí)行。PL/SQL完全可以像Java語言一樣實爆邏期坳斷、條件循環(huán)以及異常處理

等,這是標準的SQL很難辦到的事情。由于它的基礎(chǔ)是標準的SQL語句,這就使得數(shù)據(jù)庫開發(fā)人員能快速地

掌握并運用,相信這也是Oracle開發(fā)人員喜歡它的另一個重要原因??偟膩碚f,PL/SQL有以下幾個特點:

》》支持事務控制和SQL數(shù)據(jù)操作命令。

》》它支持SQL的所有數(shù)據(jù)類型,并且在此基礎(chǔ)上擴展了新的數(shù)據(jù)類型,也支持SQL的函數(shù)以及

運算符

》》PL/SQL可以存儲在Oracle服務器中

》》服務器上的PL/SQL程序可以使用權(quán)限進行控制

》》Oracle有自己的DBMS包,可以處理數(shù)據(jù)的控制和定義命令

—PL/SQL的優(yōu)勢

***由于PL/SQL語言是從SQL語言擴展而來,所以PL/SQL除了支持SQL數(shù)據(jù)類型和函數(shù)外,同時也支持

Oracle對象類型。除此之外,同傳統(tǒng)的SQL語言相比PL/SQL有以下幾個優(yōu)點:

(1)、可以提高程序的運行性能

標準的SQL被執(zhí)行時,只能一條一條地向Oracle服務器發(fā)送。假如完成一個業(yè)務邏輯需要幾條

甚至幾十條SQL語句,那么在這個過程中,客戶端會幾十次地連接數(shù)據(jù)庫服務器,而連接數(shù)據(jù)庫本身

是一個很耗費資源的過程,當這個業(yè)務被完成時,會浪費大量的資源在網(wǎng)絡(luò)連接上。

如果此時換用PL/SQL語句,結(jié)果則不一樣了。PI/SQL的語句塊可以包含多條S3.語句,而語句

塊可以嵌套在程序中,甚至可以存儲到Oracle服務器上。這樣用戶只需要連接一次數(shù)據(jù)庫就可以把

需要的參數(shù)傳遞過去,其他的部分將在Oracle服務器內(nèi)部執(zhí)行完成,然后返回最終的結(jié)果。這樣就

大大地節(jié)省了網(wǎng)絡(luò)資源的開銷。

普通SQL多條執(zhí)行同PL/SQL的差異

(2)、可以使程序模塊化

在程序塊中可以實現(xiàn)一個或幾個功能。例如,當想把一個動物的模型存到數(shù)據(jù)庫里時,

可能涉及幾張表,如果使用標準的SQL完成該功能需要多條語句,而如果使用塊,則可以把

對多張表的操作都放到一個塊內(nèi),而對外只提供一個調(diào)用方式和需要傳入的參數(shù)。這對于

編程開發(fā)人員是一個福音,他們不需要再寫過多的SQL語句,只需要給出參數(shù)并調(diào)用一次

PL/SQL的程序塊就好。這種操作的優(yōu)勢在介紹存儲過程后顯得尤其明顯。

使用塊也可以把數(shù)據(jù)庫數(shù)據(jù)同客戶程序隔離開來,使得數(shù)據(jù)庫表結(jié)構(gòu)發(fā)生變化時,對

調(diào)用者的影響減小到最低程度。

(3)、可以采用邏輯控制語句來控制程序結(jié)構(gòu)

如果一個PL/SQL程序塊中只能順序地執(zhí)行基本的SQL語句,那么它的意義實在有限。

而實際當中PL/SQL可以利用條件或循環(huán)語句來控制程序的流程,這么做就大大地增加了

PL/SQL的實用性,我們可以利用邏輯控制語句完成復雜的普通的SQL語句完成不了的業(yè)務。

例如,實現(xiàn)如下的功能:產(chǎn)品很多種類,而在產(chǎn)品表中,產(chǎn)品的類型需要使用產(chǎn)品類型編碼

替代,而不是名稱,這樣當輸入記錄的時候就需要把產(chǎn)品名稱轉(zhuǎn)換成產(chǎn)品編碼,在PL/SQL

塊中就可以利用CASE語句完成判斷分類,并把產(chǎn)品名稱轉(zhuǎn)換成產(chǎn)品編碼。而這些在標準的

SQL中很難實現(xiàn),即便實現(xiàn)了也不是動態(tài)的數(shù)據(jù)。

(4)、利用處理運行時的錯誤信息

標準的SQL在遇到錯誤時會提示異常。例如增加數(shù)據(jù),一旦有異常就會終止,但是調(diào)用者卻

很難快速地發(fā)現(xiàn)錯誤點在哪兒,即使發(fā)現(xiàn)出問題的地方也只能是告訴開發(fā)人員該語句程序本身

有問題,而不是邏輯上有問題。

例如:在產(chǎn)品表里增加數(shù)據(jù)時,數(shù)量只能是要求數(shù)值型,并沒有更細的要求。假如增加的數(shù)據(jù)

中該字段部分是一個負數(shù),正常來說是可以進入數(shù)據(jù)庫的,但這在邏輯上是不允許的,因為

沒有數(shù)量為負的產(chǎn)品。而利用PL/SQL就可以完全避免類似的問題,我們可以利用流程拒絕這

部分記錄進入數(shù)據(jù)庫。

利用PL/SQL還可以成功處理一些程序上的異常,不至于因終止SQL操作,而造成調(diào)用SQL

的展示頁面出現(xiàn)生硬的錯誤提示。

(5)、良好的可移植性

PL/SQL可以成功地運行到不同的服務器中。例如,從windows的數(shù)據(jù)庫服務器下移植到Linux

的數(shù)據(jù)庫服務器下。也可把PL/SQL從一個Oracle版本移植到其他版本的Oracle中。

-PL/SQL的結(jié)構(gòu)

PL/SQL程序的基本單位是次(block),而PL/SQL塊很明確地分三部分,其中包括聲明部分、執(zhí)行

部分和異常處鰥分。其中聲明部分以DECLARE作為開始標志,執(zhí)行部分用BEGIN作為開始部分,

而異常處理部分以EXCEPTION為開始標志。其中的執(zhí)行部分是必需的,而其余的兩個部分則可選下面

的一段文字描述了PL/SQL塊的三部分:

[DECLARE]-聲明開始關(guān)鍵字

/*這里是聲明部分,包括PL/SQL中的變量、常量以及類型等*/

BEGIN-執(zhí)行部分開始的標志

/*這里是執(zhí)行部分,是整個PL/SQL塊的主體部分,該部分在

該部分在PL/SQL塊中必須存在,可以是SQL語句或者程序流程

控制語句等*/

[EXCEPTION]-異常開始部分的關(guān)鍵字

/*這里是異常處理部分,當出現(xiàn)異常時程序流程可以進入此處*/

END;-執(zhí)行結(jié)束標志

需要記?。簾o論PL/SQL程序段的代碼量有多少,它的基本結(jié)構(gòu)只是這三部分組成。下面將以3個示例

演示PL/SQL語句塊的3種情況。

【示例1]只有執(zhí)行體部分的結(jié)構(gòu)

該示例只有執(zhí)行體部分,也就是只有"BEGIN...END;”部分,該語句塊中將輸出一句話,腳本如下:

QL>BEGIN

2DBMS.OUTPUT.PUT_LINE「這是執(zhí)行體部分。。。紇;

3END;

4/

工/SQL過程已成功完成。

QL>(gETSERUEROUTPUTOhTJ

QL>BEGIN

2DBMS.OUTPUT.PUT_LINEL這是執(zhí)行體部分。。。

3END;

遑*行體部分丁1"

丸/SQL過程已成功完成。

QL>

《執(zhí)行效果》

打開SQL*Plus執(zhí)行,執(zhí)行結(jié)果如上圖。

從上圖中可以看到“SETSERVEROUTPUTON”這么一行腳本,利用該腳本可以打開SQL*Plus

的輸出功能,否則會看不到輸出的語句。

【示例2]包含聲明和執(zhí)行體兩部分的結(jié)構(gòu)

該示例除了執(zhí)行體外還有聲明部分,具體操作是聲明一個變量,然后為變量賦值,最后輸出該

變量的值。腳本如下:

SQL>|DECLAREj

2u.resultNUMBER<8,2>;

3BEGIN|

4v-result:=100/6;

5DBMS_OUTPUT.PUTJUNE?最后的結(jié)果是:*\\u_jresult>;

6ENDT|

77

最后的結(jié)果是:16.67

PL/SQL過程已成功完成。

g0L>

《執(zhí)行效果》

打開SQL*Plus并執(zhí)行,執(zhí)行結(jié)果如上。

通常在PL/SQL編程中,變量都是存儲動態(tài)得到的數(shù)據(jù),這種情況在下一個示例中將演示。

【示例3]包含聲明部分、執(zhí)行體和異常部分的結(jié)構(gòu)

SQL>select*fromcategoryinfo;

CATEGORVIDCATEGORYNAME

SQL>DECLARE

2u_categoryidUARCHAR2<12>;

3BEGIN

4selectcategoryid[intou_categoryid存儲數(shù)據(jù)

5fromcategoi'yinFo

6wherecategoryinfo.categor^nane='雨具’;

7

8DBMS_OUTPUT.PUT_LINE<,雨具對應的編碼是:,;;u.categoryid>;

9

10EXCEPTION

11

12WHENNO_DATAJFOUNDTHEN

13DBMS.OUTPUT.PUTJINE—沒有對應的編碼?,>;

14WHENTOO_MANV_ROWSTHEN

15DBMS.OUTPUT.PUT_LINE<*對應數(shù)據(jù)過多,請確認「

16

17END;—

磊?算應的編桂:1)

PL/SQL過程已贏完/

SQL>■

SELECT...INTO...語句是PL/SQL特有的賦值語句,該語句表示的意思是SELECT后面列出要

查詢的字段列表,INTO后面是變量名稱,它表示把查詢出來的值存儲到變量中。這里有兩個問題

需要注意,就具SELECT列名順序和INTO后面的變量名順序要一一對應,遼有就是該類型語句每

次只能返回一條記錄,如果返回記錄超過一條或沒有返回記錄都會引發(fā)異常.

-PL/SQL的基本規(guī)則

PL/SQL中有一些基本的規(guī)范讀者應該了解,在了解這些基礎(chǔ)之后就可以學習更加嚴格的編程規(guī)范,

這樣才能寫出高質(zhì)量的代碼,其他開發(fā)人員閱讀起來也會有一個積極開朗的心態(tài)。下面列出初學者需

要注意的規(guī)則:

(1)、PL/SQL中允許出現(xiàn)的字符集

》》字母,包括大寫和小寫

》》數(shù)字,即0~9

》》空格、回車符以及制表符

》》符號包括+、-、*、/、<、>、=、!、~、八、;、:、.、’、@、

%、,、"、#、$、&、_、|、(、)、[、]、{、}、?

(2)、下面列出一些PL/SQL必須遵守的要求:

》》標識符不區(qū)分大小寫。例如,TEST同Test、test是一樣的。所有的名稱在存儲時都被

修改成大寫,這一點讀者需要注意。

》》標識符中允許字母、數(shù)字、下劃線,并且以字母開頭

》》標識符最多30個字符

》》不能使用保留字。如與保留字同名必須使用雙引號括起來

》》語句使用分號結(jié)束。即使多條語句在同一行,只要它們都正常結(jié)束,那么就沒有問題。

而且在語句塊的結(jié)束標志END后面同樣需要使用分號

》》語句的關(guān)鍵詞、標識符、字段的名稱以及表的名稱等都需要空格的分隔

》》字符類型和日期類型需要使用單引號括起

(3)、以下是為了增強代碼的閱讀性的相關(guān)建議,這些不是必須要遵守的,但通常情況下有些單位

也可能把這些規(guī)范作為硬性要求。

》》每行只寫一條語句

》》全部的保留字、Oracle的內(nèi)置函數(shù)、程序包以及用戶定義的數(shù)據(jù)類型都用大寫

》》所有的過程名稱大寫

》》所有的變量以及自建的過程或游標、觸發(fā)器名稱都要使用有意義的名稱命名

》》命名應以“一”的連接方式,而不是用大小寫混合的方式(如果只為了方便自己的閱讀,可以

使用大小寫混合)

》》變量前最好加上前綴,以表示該變量的數(shù)據(jù)類型、作用范圍等

》》每個變量都應加上注釋

》》在重要的程序段處都應加上注釋

》》建議3個半角空格替代TAB鍵進行縮進

》》逗號后面以及操作符的前后都應加上空格

以上只是比較基本的規(guī)則,可以提高代碼的可讀性,在企業(yè)的每個項目小組中會根據(jù)實際的情況

做出更細的要求,甚至形成規(guī)范文檔。在日常開發(fā)中應注意這些規(guī)范,形成良好的編程習慣。

-PL/SQL中的注釋

***提高代碼可讀性的最有效的辦法就是添加注釋。工作中修改其他開發(fā)人員的程序是很常見的事,程序

如果沒有注釋,就會很難理解,這樣導致的結(jié)果輕則會影響修改進度,重則會影響程序的開發(fā)進度,

可見注釋對程序是多么重要。通常情況下,程序的注釋要求不能低于代碼量的20%,注釋也是程序的

一部分,所以開發(fā)人員要養(yǎng)成添加注釋的好習慣。

***有注釋的程序能使閱讀者快速地了解代碼實現(xiàn)的業(yè)務邏輯,并能理解程序的思路。這對自己和其他的

開發(fā)人員都是很有利的,甚至對公司來講都是利遠大于弊。Oracle為使用者提供了兩種注釋方式,

它們分別是:

》》單行注釋:使用"一二兩個短劃線,可以注釋掉后面的語句

》》多行注釋:使用"/*..?*/”,可以注釋掉這兩部分包含的部分

簡述什么是自身連接

假設(shè)有一個數(shù)據(jù)表為Course:

Cn。為課程號,Cname為課程名,CPn。為上這門課程之前必須學習的的課程號:

查詢每一門課的間接先修課(即先修課的先修課)。

SELECTA.Cno,A.Cname,B.Cpno

FROMCourseA,CourseB

WHEREA.Cpno=B.Cno;

自身連接:自己的表格與自己的表格連接:設(shè)為CourseA與CourseB就行了,用來做區(qū)分的:

Course表:

CnoCnameCpnoCcredit

1口數(shù)據(jù)庫54

22數(shù)學NULL2

33信息系統(tǒng)14

44操作系統(tǒng)63

55數(shù)據(jù)結(jié)構(gòu)74

66數(shù)據(jù)處理NULL2

77PASCAL語言64

88DB設(shè)計NULL4

,vWWSAAAAA/SAAAAAAA/

EselectA.Cno,A.Cname,B.Cpno

fromCourseA,CourseB

whereA.Cpno=B.Cno;

CnoCnaaeCpno

1111數(shù)據(jù)庫7

23信息系統(tǒng)5

34操作系統(tǒng)NULL

45數(shù)據(jù)結(jié)構(gòu)6

57PASCAL語言NULL

外連接:

假設(shè)有這樣的兩個表格:Student與SC表Student為所有的學生,而SC表為學生的選課表,我們可以知道王敏和

張力沒有選課,當使用Student.Sno=Sc.Sno的條件時,我們會發(fā)現(xiàn)無法出現(xiàn)王敏和張立的信息

Student表:

SnoSnaneSsexSageSdept

1|201215121|李勇男20CS

220

溫馨提示

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

評論

0/150

提交評論