數(shù)據(jù)庫原理與應(yīng)用:第14章 存儲(chǔ)過程_第1頁
數(shù)據(jù)庫原理與應(yīng)用:第14章 存儲(chǔ)過程_第2頁
數(shù)據(jù)庫原理與應(yīng)用:第14章 存儲(chǔ)過程_第3頁
數(shù)據(jù)庫原理與應(yīng)用:第14章 存儲(chǔ)過程_第4頁
數(shù)據(jù)庫原理與應(yīng)用:第14章 存儲(chǔ)過程_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫原理與應(yīng)用第14章存儲(chǔ)過程

存儲(chǔ)過程是SQL語句和可選控制流程語句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。存儲(chǔ)過程存儲(chǔ)在數(shù)據(jù)庫內(nèi),可由應(yīng)用程序通過一個(gè)調(diào)用執(zhí)行,而且允許用戶聲明變量、有條件執(zhí)行以及其它強(qiáng)大的編程功能。存儲(chǔ)過程可包含程序流、邏輯以及對(duì)數(shù)據(jù)庫的查詢。它們可以接受參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值。

存儲(chǔ)過程具有以下優(yōu)點(diǎn):

1、可以在單個(gè)存儲(chǔ)過程中執(zhí)行一系列SQL語句。

2、可以從自己的存儲(chǔ)過程內(nèi)引用其它存儲(chǔ)過程,這可以簡化一系列復(fù)雜語句。

3、存儲(chǔ)過程在創(chuàng)建時(shí)即在服務(wù)器上進(jìn)行編譯,所以執(zhí)行起來比單個(gè)SQL語句快。

14.1存儲(chǔ)過程的分類(1)系統(tǒng)存儲(chǔ)過程系統(tǒng)存儲(chǔ)過程是由系統(tǒng)提供的存儲(chǔ)過程,可以作為命令執(zhí)行各種操作。系統(tǒng)存儲(chǔ)過程定義在系統(tǒng)數(shù)據(jù)庫master中,其前綴是sp_。(2)本地存儲(chǔ)過程本地存儲(chǔ)過程是指在用戶數(shù)據(jù)庫中創(chuàng)建的存儲(chǔ)過程,這種存儲(chǔ)過程完成用戶指定的數(shù)據(jù)庫操作,其名稱不能以sp_為前綴。

(3)臨時(shí)存儲(chǔ)過程臨時(shí)存儲(chǔ)過程屬于本地存儲(chǔ)過程。如果本地存儲(chǔ)過程的名稱前面有一個(gè)“#”,該存儲(chǔ)過程就稱為局部臨時(shí)存儲(chǔ)過程,這種存儲(chǔ)過程只能在一個(gè)用戶會(huì)話中使用。

(4)遠(yuǎn)程存儲(chǔ)過程遠(yuǎn)程存儲(chǔ)過程指從遠(yuǎn)程服務(wù)器上調(diào)用的存儲(chǔ)過程。(5)擴(kuò)展存儲(chǔ)過程在SQLServer環(huán)境之外執(zhí)行的動(dòng)態(tài)鏈接庫稱為擴(kuò)展存儲(chǔ)過程,其前綴是sp_。使用時(shí)需要先加載到SQLServer系統(tǒng)中,并且按照使用存儲(chǔ)過程的方法執(zhí)行。14.2用戶存儲(chǔ)過程的創(chuàng)建與執(zhí)行1.通過SQL命令創(chuàng)建和執(zhí)行存儲(chǔ)過程步驟如下:(1)定義如下存儲(chǔ)過程USEschoolGOCREATEPROCEDUREaASSELECTstudent.sno,sname,course.cno,cname,degreeFROMstudent,score,courseWHEREstudent.sno=score.snoANDscore.cno=course.cnoGO(2)調(diào)用存儲(chǔ)過程EXECaGO14.2用戶存儲(chǔ)過程的創(chuàng)建與執(zhí)行1)創(chuàng)建存儲(chǔ)過程語法格式:CREATEPROC[EDURE]procedure_name[;number]/*定義存儲(chǔ)過程名*/[{@parameterdata_type} /*定義參數(shù)的類型*/[VARYING][=default][OUTPUT]

] /*定義參數(shù)的屬性*/[,...n] [WITH

{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}] /*定義存儲(chǔ)過程的處理方式*/[FORREPLICATION]ASsql_statements /*執(zhí)行的操作*/14.2用戶存儲(chǔ)過程的創(chuàng)建與執(zhí)行2)存儲(chǔ)過程的執(zhí)行通過EXEC命令可以執(zhí)行一個(gè)已定義的存儲(chǔ)過程。語法格式:[EXEC[UTE]]

[@return_status=]{procedure_name[;number]|@procedure_name_var}[[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]}[,...n]一、設(shè)計(jì)簡單的存儲(chǔ)過程例14.1利用school數(shù)據(jù)庫中的school表、score表和course表,編寫一無參存儲(chǔ)過程用于查詢所有學(xué)生的選修課程成績記錄。CREATEPROCEDUREaASSELECTstudent.sno,sname,course.cno,cname,degreeFROMstudent,score,courseWHEREstudent.sno=score.snoANDscore.cno=course.cnoEXECa二、使用帶有參數(shù)的存儲(chǔ)過程例14.2編寫一存儲(chǔ)過程,根據(jù)school數(shù)據(jù)庫的student、score、course三個(gè)表查詢指定學(xué)生的選修課程成績情況。CREATEPROCEDUREb@snochar(5)ASSELECTstudent.sno,sname,course.cno,cname,degreeFROMstudent,score,courseWHEREstudent.sno=score.snoANDscore.cno=course.cnoANDstudent.sno=@snoEXECb'101'三、帶有通配符參數(shù)的存儲(chǔ)過程例14.3利用shool數(shù)據(jù)庫中student表、score、course表創(chuàng)建一存儲(chǔ)過程c,查詢指定課程名的選修情況。該存儲(chǔ)過程在參數(shù)中使用了模糊查詢,如果沒有提供參數(shù),則使用預(yù)設(shè)的默認(rèn)值。CREATEPROCEDUREc@cnamevarchar(16)='%計(jì)算機(jī)%'ASSELECTstudent.sno,sname,course.cno,cname,degreeFROMstudent,score,courseWHEREstudent.sno=score.snoANDscore.cno=course.cnoANDcnameLIKE@cnameEXECcEXECc'操作%'EXECc'%計(jì)%'四、帶有OUTPUT參數(shù)的存儲(chǔ)過程例14.4編寫一存儲(chǔ)過程,統(tǒng)計(jì)指定課程選修人數(shù),存儲(chǔ)過程中使用了輸入和輸出參數(shù)。CREATEPROCEDUREm@cnamechar(16),@numintoutputASSELECT@num=COUNT(sno)FROMscore,courseWHEREscore.cno=course.cnoANDcnameLIKE@cnameDECLARE@numintEXECm'操作系統(tǒng)',@numoutputSELECT@numAS'選修次數(shù)'五、帶有OUTPUT游標(biāo)參數(shù)的存儲(chǔ)過程例14.5在school數(shù)據(jù)庫的student表上聲明并打開一個(gè)游標(biāo)。CREATEPROCEDUREstudent_cursor@student_curCURSORVARYINGOUTPUTASSET@student_cur=CURSORFORWARD_ONLYSTATICFORSELECTsno,sname,ssex,classFROMstudentOPEN@student_curDECLARE@mycursorCURSOREXECstudent_cursor@student_cur=@mycursorOUTPUTFETCHNEXTFROM@mycursorWHILE@@FETCH_STATUS=0FETCHNEXTFROM@mycursorCLOSE@mycursorDEALLOCATE@mycursor六、使用WITHENCRYPTION選項(xiàng)例14.6創(chuàng)建加密過程(使用sp_helptext系統(tǒng)存儲(chǔ)過程獲取關(guān)于加密的存儲(chǔ)過程的信息)。CREATEPROCEDUREencryption_thisWITHENCRYPTIONASSELECT*FROMstudentEXECsp_helptext'encryption_this'七、創(chuàng)建用戶定義的系統(tǒng)存儲(chǔ)過程例14.7創(chuàng)建存儲(chǔ)過程sp_showtable,顯示以student開頭的所有表名及其對(duì)應(yīng)的索引名。如果沒有指定參數(shù),該存儲(chǔ)過程將返回以course開頭的所有表名及對(duì)應(yīng)的索引名。CREATEPROCEDUREsp_showtable@tablevarchar(20)='course%'ASSELECTsysobjects.name,sysindexes.nameFROMsysobjects,sysindexesWHEREsysobjects.id=sysindexes.idANDsysobjects.nameLIKE@tableANDindid<>0ANDindid<>255EXECsp_showtableEXECsp_showtable'student%'14.2用戶存儲(chǔ)過程的創(chuàng)建與執(zhí)行2.利用企業(yè)管理器創(chuàng)建用戶存儲(chǔ)過程(1)在SQLServer

企業(yè)管理器的目錄樹中,選中school數(shù)據(jù)庫文件夾下的存儲(chǔ)過程圖標(biāo)右擊,出現(xiàn)一快捷菜單,選擇菜單項(xiàng)“新建存儲(chǔ)過程”,進(jìn)入新建存儲(chǔ)過程窗口,如圖所示;(2)在新建存儲(chǔ)過程窗口輸入定義的存儲(chǔ)過程,然后選擇“確定”按鈕。14.3用戶存儲(chǔ)過程的編輯修改使用ALTERPROCEDURE命令可修改已存在的存儲(chǔ)過程。語法格式:ALTERPROC[EDURE]procedure_name[;number] [{@parameterdata_type} [VARYING][=default][OUTPUT]][,...n][WITH

{RECOMPILE|ENCRYPTION

|RECOMPILE,ENCRYPTION

}][FORREPLICATION]AS

sql_statements14.4用戶存儲(chǔ)過程的刪除

如果確認(rèn)一個(gè)數(shù)據(jù)庫的某個(gè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論