




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
思考1
數(shù)據(jù)庫中有教師表如下:Teacher(TeaID,TeaName,TeaTitle,CourseNum)其中,TeaTitle表示職稱,CourseNum表示本月課時數(shù),請根據(jù)教師表,寫程序完成教師工資的自動生成。工資表如下:Salary(TeaID,TeaName,Wage),其中Wage當月表示工資。計算公式如下:Wage=基本工資+課時費基本工資:講師(1000),副教授(1500),教授(2000)課時費=每課時工資×課時數(shù)每課時工資:講師(80),副教授(90),教授(100)2TeaIDTeaNameTeaTitleCourseNum0001Mary講師500002Tom教授400003Mike副教授40TeaIDTeaNameWage0001Mary50000002Tom60000003Mike5100第十章游標3目標4理解游標的概念使用游標10.1游標5
在開發(fā)數(shù)據(jù)庫應用程序時,經常需要使用SELECT語句查詢數(shù)據(jù)庫時,查詢返回的數(shù)據(jù)存放在結果集中。用戶在得到結果集后,需要逐行逐列的獲取其中存儲的數(shù)據(jù),根據(jù)不同的值做不同的處理。這時候需要使用游標,游標就是一種定位并控制結果集的機制。游標的基本概念6游標是映射結果集并在結果集內的單個行上建立一個位置的實體。有了游標,用戶就可以訪問結果集中的任意一行數(shù)據(jù)了。在將游標放置到某行之后,可以在該行或從該位置開始的行塊上執(zhí)行操作。最常見的操作是提?。z索)當前行或行塊。10.3游標使用步驟7聲明游標。打開游標。讀取游標數(shù)據(jù)。關閉游標。釋放游標。10.3.1聲明游標8語法:
DECLARE游標名稱CURSORFORselect語句示例:聲明一個游標,結果集為“Student”表中所有的男同學。解決方案:
DECLAREcurMaleStudentCURSORFORSELECT*FROMStudentWHEREStuSex=‘男’10.3.2打開游標9語法:
OPEN游標名稱示例:打開上例中聲明的游標解決方案:
DECLAREcurMaleStudentCURSORFORSELECT*FROMStudentWHEREStuSex=‘男’ OPENcurMaleStudent注:不能打開一個未被聲明過的游標,否則編譯器報錯!已打開的游標關閉之前不能再次打開,否則編譯器也報錯!10.3.3讀取游標數(shù)據(jù)10語法:
FETCHNEXT游標名稱[INTO@變量名[,...n]]示例:基于上例中聲明的游標,讀取第一行的數(shù)據(jù)。解決方案:
DECLAREcurMaleStudentCURSORFORSELECT*FROMStudentWHEREStuSex=‘男’ OPENcurMaleStudentFETCHNEXTFROMcurMaleStudent10.3.4游標函數(shù)11@@FETCH_STATUS函數(shù)返回被FETCH語句執(zhí)行的最后游標的狀態(tài)。返回值如下:0:FETCH語句成功?1:FETCH語句失敗或此行不在結果集中?2:被提取的行不存在
示例12示例:使用游標遍歷“Student”表中的每一條記錄。解決方案:DECLAREcurMaleStudentCURSORFORSELECT*FROMStudentWHEREStuSex=‘男’ OPENcurMaleStudentFETCHNEXTFROMcurMaleStudent WHILE@@FETCH_STATUS=0FETCHNEXTFROMcurMaleStudent
10.3.5-10.3.6關閉及釋放游標13關閉游標語法:CLOSE游標名稱釋放游標語法:DEALLOCATE游標名稱注:游標關閉并不代表釋放資源,釋放前不能申明同名游標。示例:使用游標遍歷“Student”表中的每一條記錄。解決方案:DECLAREcurMaleStudentCURSORFORSELECT*FROMStudentWHEREStuSex=‘男’ OPENcurMaleStudentFETCHNEXTFROMcurMaleStudent WHILE@@FETCH_STATUS=0FETCHNEXTFROMcurMaleStudentCLOSEcurMaleStudentDEALLOCATEcurMaleStudent10.4使用游標讀取數(shù)據(jù)到變量中14語法:FETCHNEXT游標名稱[INTO@變量名[,...n]]說明:該語句的使用必須和游標聲明語句配合使用DECLARE游標名稱CURSORFORselect語句Select語句出現(xiàn)的字段必須與INTO后出現(xiàn)的變量名個數(shù)相等,且一一對應示例15使用游標遍歷Department表中的每個系的系名,然后把系名打印出來。DECLARE@DepartmentNamevarchar(20)DECLAREcurDepartmentcursorforSELECTDepNameFROMDepartmentOPENcurDepartmentFETCHcurDepartmentinto@DepartmentNameWhile(@@fetch_status=0)BEGIN Print'DepartmentName='+@DepartmentName FETCHcurDepartmentinto@DepartmentNameENDCLOSEcurDepartmentDEALLOCATEcurDepartment游標一般創(chuàng)建在存儲過程中使用練習16使用游標完成教師工資的生成DECLARE@TeaIDchar(10)--用于存放教師工號DECLARE@TeaTitlevarchar(20)--用于存放教師職稱DECLARE@CourseNumint--用于存放教師本月課時數(shù)DECLARE@Wagedecimal--用于存放本月工資DECLAREcurTeacherWageCURSORFORSELECTTeaID,TeaTitle,CourseNumFROMTeacherOPENcurTeacherWage--聲明游標指向教師表--將游標當前指向的行的TeaID、TeaTitle、CourseNum字段值賦給變量保存FETCHcurTeacherWageINTO@TeaID,@TeaTitle,@CourseNum練習17WHILE(@@FETCH_STATUS=0)BEGIN --根據(jù)教師的職稱及課時數(shù),計算工資,保存變量@Wage IF(@TeaTitle='講師') SET@Wage=1000+80*@CourseNum ELSEIF(@TeaTitle='副教授') SET@Wage=1500+90*@CourseNum ELSE SET@Wage=2000+100*@CourseNum INSERTINTOSalaryVALUES(@TeaID,@Wage)--插入當前教師的工資
FETCHcurTeacherWageINTO
@TeaID,@TeaTitle,@CourseNumENDCLOSEcurTeacherWageDEALLOCATEcurTeacherWage10.5嵌套游標18有學生表和系表,游標1先找出系表中的每個系,對于找到的系,再使用游標2找出該系的所有學生的信息。嵌套游標19語法:declarecursor_name1for…opencursor_name1fetchcursor_name1While(@@fetch_status=0)begin declarecursor_name2for… opencursor_name2 fetchcursor_name2 while(@@fetch_status=0) … closecursor_name2 deallocatecursor_name2
fetchcursor_name1endclosecursor_name1deallocatecursor_name1示例20有學生表和系表,使用嵌套游標,游標1先找出系表中的每個系,對于找到的系,再使用游標2找出該系的所有學生的信息。示例21有學生表和系表,使用嵌套游標,游標1先找出系表中的每個系,對于找到的系,再使用游標2找出該系的所有學生的信息。declare@DepIDintdeclarecurDepartmentcursorforselectDepIDfromdepartmentopencurDepartmentfetchcurDepartmentinto@DepIDWhile(@@fetch_status=0)begin
declarecurStudentcursorforselect*fromstudent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 社團贊助協(xié)議書模板
- 汽車買賣協(xié)議書樣本
- 專利轉化協(xié)議書范本
- 征兵安全協(xié)議書模板
- 醫(yī)院死人協(xié)議書模板
- 繼承贍養(yǎng)協(xié)議書范文
- 豬場承包協(xié)議書范本
- 律師個人退伙協(xié)議書
- 美國疫苗轉讓協(xié)議書
- 學校社團聘請協(xié)議書
- GB/T 25745-2010鑄造鋁合金熱處理
- 校外租房學生走訪記錄
- GB/T 1420-2015海綿鈀
- 鍵盤顯示器接口課件
- 良性前列腺增生診療指南
- 預防校園欺凌-共創(chuàng)和諧校園-模擬法庭劇本
- 中國火車發(fā)展歷程課件
- 執(zhí)行力、心態(tài)管理培訓課件
- 河北省廊坊市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細及行政區(qū)劃代碼
- 不甘屈辱奮勇抗爭第三課時甲午風云課件五年級道德與法治
- 家具廠安全生產臺帳
評論
0/150
提交評論