版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省東營市廣饒縣樂安中學(xué)2024-2025學(xué)年八年級(jí)上學(xué)期12月月考化學(xué)試題-A4
- 2023年藥品包裝機(jī)械項(xiàng)目籌資方案
- 2023年醫(yī)用衛(wèi)生材料敷料項(xiàng)目籌資方案
- 《環(huán)境資源法概述》課件
- 2024年橄欖油采購協(xié)議3篇
- 放電纜安全協(xié)議書(2篇)
- 2024年版:人工智能語音助手開發(fā)合同
- 2024年生物醫(yī)藥制品生產(chǎn)與銷售合同
- 2025年寧德貨運(yùn)資格證模擬考試題庫
- 2025年泉州貨運(yùn)從業(yè)資格證模擬考試題目
- 品質(zhì)部年終總結(jié)報(bào)告2022
- 庫爾勒香梨行業(yè)分析
- 易燃液體罐車裝卸作業(yè)操作規(guī)程模版
- 六年級(jí)上冊(cè)必讀書目《童年》閱讀測試題(附答案)
- 頭痛的鑒別診斷
- 機(jī)械工程測試技術(shù)課后習(xí)題
- 人工智能輔助命題
- 麻醉藥相關(guān)項(xiàng)目營銷策略方案
- 30題戰(zhàn)略規(guī)劃崗位常見面試問題含HR問題考察點(diǎn)及參考回答
- 閘門槽施工方案
- 國家開放大學(xué)《供應(yīng)鏈管理》形考作業(yè)1-4參考答案
評(píng)論
0/150
提交評(píng)論