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

下載本文檔

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

文檔簡介

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

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

存儲過程具有以下優(yōu)點:

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

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

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

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

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

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

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

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

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

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

{RECOMPILE|ENCRYPTION

|RECOMPILE,ENCRYPTION

}][FORREPLICATION]AS

sql_statements14.4用戶存儲過程的刪除

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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論