《數(shù)據(jù)庫》課件第7章-存儲過程-輸出參數(shù)_第1頁
《數(shù)據(jù)庫》課件第7章-存儲過程-輸出參數(shù)_第2頁
《數(shù)據(jù)庫》課件第7章-存儲過程-輸出參數(shù)_第3頁
《數(shù)據(jù)庫》課件第7章-存儲過程-輸出參數(shù)_第4頁
《數(shù)據(jù)庫》課件第7章-存儲過程-輸出參數(shù)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1回顧帶有輸入?yún)?shù)的存儲過程帶有Return語句的存儲過程2練習(xí):輸入學(xué)生的學(xué)號,如果輸入信息正確,則統(tǒng)計該學(xué)生所選課程數(shù)(用return語句),并調(diào)用存儲過程顯示結(jié)果。

思考:如果上題還需返回學(xué)生不及格科目數(shù),該如何操作?3第七章

存儲過程-輸出參數(shù)4目標(biāo)存儲過程的輸出參數(shù)創(chuàng)建帶有參數(shù)的存儲過程(輸出參數(shù))存儲過程調(diào)用存儲過程57.7存儲過程的參數(shù)存儲過程的參數(shù)分為輸入?yún)?shù)和輸出參數(shù)兩種類型,輸入?yún)?shù)用于向存儲過程中帶入數(shù)據(jù),而輸出參數(shù)則能將存儲過程中的數(shù)據(jù)返回到調(diào)用程序。在定義存儲過程時,可以同時指定輸入及輸出參數(shù):@參數(shù)名數(shù)據(jù)類型[=默認(rèn)值][OUTPUT][,...n]6示例創(chuàng)建存儲過程prcGetAvgScore,用于根據(jù)給定的學(xué)號計算該學(xué)生所有課程的平均成績,并使用輸出參數(shù)返回平均成績。解決方案:CREATEPROCEDUREprcGetAvgScore@StuIDchar(10),--學(xué)號,輸入?yún)?shù)

@AvgScorefloatOUTPUT--成績,輸出參數(shù)ASBEGINTRYIFEXISTS(select*fromscwhereStuID=@StuID) select@AvgScore=avg(Score)fromSCwhereStuID=@StuIDELSE print‘thestudentdoesnotexists!’ENDTRYBEGINCATCHPRINT‘ERRORRAISED’ENDCATCH用戶輸入:DECLARE@AvgScorefloatEXECprcGetAvgScore‘A00001’,@AvgScoreOUTPUTPRINT@AvgScore7練習(xí):輸入學(xué)生的學(xué)號,如果輸入信息正確,則統(tǒng)計該學(xué)生所有科目的最高分和不及格的科目數(shù),并將以上數(shù)據(jù)使用輸出參數(shù)返回。8解決方案:createprocprcGetStuGradeInfo@StuIDchar(10),@MaxScorefloat=0output,@FailCountint=0outputasbegintry ifexists(select*fromscwhereStuID=@StuID) begin select@MaxScore=max(Score)fromSC whereStuID=@StuID

select@FailCount=count(Score)fromSC

whereStuID=@StuIDandScore<60 end else

print'studentdoesnotexist'endtrybegincatch print'error'endcatch用戶輸入:declare@MaxScorefloatdeclare@FailCountintexecprcGetStuGradeInfo'A00001',@MaxScoreoutput,@FailCountoutputprint@MaxScoreprint@FailCount9思考針對存儲過程prcGetStuGradeInfo的返回值,用戶使用該存儲過程,如果不及格數(shù)大于等于3門,則提示用戶‘親,您掛了,重頭再來吧!’;否則顯示學(xué)生已獲學(xué)分。假設(shè)Course表(CourseID,CourseName,Credit)declare@MaxScorefloat

declare@FailCountintexecprcGetStuGradeInfo'A00001',@MaxScoreoutput,@FailCountoutputif(@FailCount>=3) print'親,您掛了,重頭再來吧!'else begin declare@Creditint select@Credit=sum(Credit)fromSCjoinCourseonSC.CourseID=Course.CourseID whereStuID='A00001'andScore>=60 print@Credit end107.8存儲過程調(diào)用存儲過程有存儲過程A和B,假設(shè)B中需要調(diào)用存儲過程A,則存儲過程B的參數(shù)列表中,一般情況下輸入?yún)?shù)必須與存儲過程A的完全一致,且一一對應(yīng),A中的輸出參數(shù)不在B中出現(xiàn)。11用戶端輸入變成存儲過程createprocprcManageGradeInfo@StuIDchar(10)Asbegintry declare@MaxScorefloat

declare@FailCountint execprcGetStuGradeInfo@StuID,@MaxScoreoutput,@FailCountoutput if(@FailCount>=3)

print'親,您掛了,重頭再來吧!' else begin

declare@Creditint

select@Credit=sum(Credit)fromSCjoinCourseonSC.CourseID=Course.CourseID

whereStuID=@StuIDandScore>=60

print@Creditprint@MaxScore endendtrybegincatch…

用戶輸入:ExecprcManageGradeInfo‘A00001’127.9修改存儲過程使用ALTERPROCEDURE語句修改存儲過程語法:ALTERPROC[EDURE]存儲過程名[{@參數(shù)名數(shù)據(jù)類型}[=默認(rèn)值][OUTPUT]][,...n]ASSQL語句[...n]137.9刪除存儲過程使用DROPPROCEDURE語句14練習(xí)示例:寫一個存儲過程,查找某個學(xué)生是否選修了某門課程,如果選修了則返回1,否則返回0,錯誤返回-1.解決方案:CREATEPROCprcIsCourseSelected@StuIDchar(10),@CourseIDintASBEGINTRYifexists(select*fromSCwhereStuID=@StuIDandCourseID=@CourseID)return1elsereturn0ENDTRYBEGINCATCHreturn-1ENDCATCH再寫一個存儲過程調(diào)用上一存儲過程,當(dāng)返回值為1,顯示選修成績,為0時提示用戶信息有誤,-1時提示出錯了。15解決方案:CREATEPROCprcManageIsCourseSelected@StuIDchar(10),@CourseIDintAS

… DECLARE@returnValueint EXEC@returnValue=prcIsCourseSelected@StuID,@CourseID IF@returnValue=1 BEGIN DECLARE@Gradefloat SELECT@Grade=ScoreFROMSCWHEREStuID=@StuIDANDCourseID=@CourseID PRINT@Grade END ELSEIF@returnValue=0 PRINT'用戶信息有誤' ELSE PRINT'程序出錯'

…再寫一個存儲過程調(diào)用上一存儲過程,當(dāng)返回值為1,顯示選修成績,為0時提示用戶信息有誤,-1時提示出錯了。16思考:寫一個存儲過程執(zhí)行銀行轉(zhuǎn)賬的功能,假設(shè)數(shù)據(jù)庫中有賬戶表Account(UserName,UserAccount),現(xiàn)要將用戶A轉(zhuǎn)賬到用戶B一定的金額,完成存儲過程。createprocprcTransfer@OrginUservarchar(20),@DesUservarchar(20),@MoneymoneyAs…

ifexists(select*fromAccountwhereUserName=@OrginUser)

ifexists(select*fromAccountwhereUserName=@DesUser)

begin updateAccountsetUserAccount=UserAccount-

溫馨提示

  • 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

提交評論