實驗報告數(shù)據(jù)庫編程.doc_第1頁
實驗報告數(shù)據(jù)庫編程.doc_第2頁
實驗報告數(shù)據(jù)庫編程.doc_第3頁
實驗報告數(shù)據(jù)庫編程.doc_第4頁
實驗報告數(shù)據(jù)庫編程.doc_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

實驗報告六(1)課程名稱數(shù)據(jù)庫系統(tǒng)原理與應用實驗日期11.21(計科1301ZB)11.28(計科1101B)實驗項目名稱數(shù)據(jù)庫編程(1)實驗地點1#609實驗類型驗證型 設計型綜合型 學 時2一、實驗目的及要求(本實驗所涉及并要求掌握的知識點)1、 掌握流程控制語句的使用。2、 掌握游標、存儲過程的定義和使用二、實驗環(huán)境(本實驗所使用的硬件設備和相關軟件)硬件:微型計算機軟件:Windows XP操作系統(tǒng);SQL Server2005數(shù)據(jù)庫管理系統(tǒng);Eclipse三、實驗內容及步驟一、流程控制語句:1、BEGINEND包括一系列的Transact-SQL語句,從而可以執(zhí)行一組Transact-SQL語句。語法如下:BEGIN sql_statement END參數(shù)含義如下。sql_statement 使用語句塊定義的任何有效的Transact-SQL語句或語句組。2、IFELSE指定Transact-SQL語句的執(zhí)行條件。 語法如下:IF 邏輯表達式 sql_statement ELSEsql_statement 3、WHILE設置重復執(zhí)行SQL語句或語句塊的條件。 語法如下:WHILE 邏輯表達式 sql_statement 4、BREAK與CONTINUE可以使用BREAK和CONTINUE關鍵字在循環(huán)內部控制WHILE循環(huán)中語句的執(zhí)行。 BREAK用于退出最內層的WHILE循環(huán);CONTINUE用于重新開始下一次WHILE循環(huán),在CONTINUE關鍵字之后的語句都不會被執(zhí)行,而是跳轉到循環(huán)開始的地方繼續(xù)執(zhí)行。5、流程控制語句舉例:求100以內的奇數(shù)之和declare num int,sum intset num=0set sum=0while num100begin set num=num+1if num%2=0 continueelseset sum=sum+numendprint sum6、WAITFOR語法格式:WaitFor Delay time |time time 例1:首先顯示學生表的信息,延時10秒鐘后再顯示課程表的信息use MyDBgoselect * from studentgowaitfor delay 00:00:10go select * from courseGo例2、在早上八點執(zhí)行存儲過程 myproBeginWaitfor time 8:00Exec myproEnd 7、GoTo GOTO語句將一個批的執(zhí)行轉到另一個有標號的語句。跳過GOTO后面的Transact-SQL語句,并從標號位置繼續(xù)處理。例:使用以下語句重新計算從1 加到100 的值。DECLARE Result int ,n intSET n=0SET Result=0Loop_1: /*定義標號*/SET Result=Result+nSET n=n+1IF n89 then 優(yōu)秀 when grade79 and grade69 and grade 59 and grade 70 then 及格 else 不及格end As 成績級別from student,course,scwhere student.sno=sc.snoand o=oand sname=李勇【任務1】1、求10!。2、從st數(shù)據(jù)庫中查詢所有學生選課成績情況,包括如下信息:姓名、課程名、成績。要求:凡是成績?yōu)榭照咻敵觯骸拔纯肌?、小?0分的輸出“不及格”;6070分的輸出“及格”;7080分的輸出“中”;8090分的輸出“良好”;90100分的輸出“優(yōu)秀”。并且輸出記錄按下列要求排序:先按學號升序,再按課程號升序,最后按成績降序排序。二、游標 一個對表進行操作的T_SQL語句通常都可產生或處理一組記錄,但是許多應用程序,通常不能把整個結果集作為一個單元來處理,這些應用程序就需要一種機制來保證每次處理結果集中的一行或幾行,游標就提供了這種機制。Sql Server通過游標提供了對一個結果集進行逐行處理的能力,游標可看作一種特殊的指針,她與某個查詢結果相聯(lián)系,可以指向結果集的任意位置,以便對指定位置的數(shù)據(jù)進行處理。使用游標可以在查詢數(shù)據(jù)的同時對數(shù)據(jù)進行處理。每一個游標必須有四個組成部分這四個關鍵部分必須符合下面的順序;1. 聲明游標 (DECLARE 游標 )2.打開游標 (OPEN 游標)3.讀取游標中數(shù)據(jù)(從一個游標中FETCH 信息)4.關閉或刪除游標(CLOSE 或DEALLOCATE 游標)(1)聲明游標其語法格式如下:DECLARE cursor_name CURSORSCROLLFOR select_statementFOR READ ONLY | UPDATE OF column_name ,.n其中:cursor_name指游標的名字。 SCROLL表明所有的提取操作(如FIRST、 LAST、 PRIOR、 NEXT、 RELATIVE、 ABSOLUTE)都可用。如果不使用該保留字,那么只能進行NEXT 提取操作。由此可見,SCROLL 極大地增加了提取數(shù)據(jù)的靈活性,可以隨意讀取結果集中的任一行數(shù)據(jù)記錄,而不必關閉再重開游標。 select_statement是定義結果集的SELECT 語句。UPDATE OF column_name,n定義在游標中可被修改的列,如果不指出要更新的列,那么所有的列都將被更新。(2)打開游標聲明游標后,要使用游標從中提取數(shù)據(jù),就必須先打開游標。使用open語句打開游標。其格式為:Open 游標名打開游標后,可以使用全局變量CURSOR_ROWS查看游標中數(shù)據(jù)行的數(shù)目。(3)讀取數(shù)據(jù)。其格式為:Fetch next|prior|first|last|absolute n |relativ nFrom 游標名Into 變量列表說明:next|prior|first|last|absolute n |relativ n:用于說明讀取數(shù)據(jù)的位置。Next說明讀取當前行的下一行,并且使其為當前行。Prior說明讀取當前行的前一行,并且使其為當前行。Absolute n 如果n為正數(shù),則讀取從游標頭開始的第n行,并將讀取的行變成新的當前行。如果n為負數(shù),則讀取游標尾之前的第n行,并將讀取的行變成新的當前行。如果n為0,則沒有返回行。Ralative n如果n為正數(shù),則讀取當前行之后的第n行,并將讀取的行變成新的當前行。如果n為負數(shù),則當前行之前的第n行,并將讀取的行變成新的當前行。如果n為0,則讀取當前行。(4)關閉游標游標使用完畢后要及時關閉。關閉游標用Close 其格式為:Close 游標名(5)刪除游標游標關閉后,其定義仍在,需要時可用open語句打開它再使用。若確認游標不再需要,就要釋放其定義占用的系統(tǒng)空間,即刪除游標。刪除游標用Deallocate語句。其格式為:Deallocate 游標名。(6)和游標相關的函數(shù)FETCH_STATUS 返回針對連接當前打開的任何游標發(fā)出的上一條游標 FETCH 語句的狀態(tài)。返回類型 integer 返回值如下表:返回值 說明 0FETCH 語句成功。-1FETCH 語句失敗或行不在結果集中。-2提取的行不存在。CURSOR_ROWS全局變量CURSOR_ROWS中保存著最后打開的游標中的數(shù)據(jù)行數(shù)。當其值為0時,表示沒有游標打開;當其值為m(m為正整數(shù))時,m時游標中的數(shù)據(jù)行數(shù)。例1定義一個只可向前讀取數(shù)據(jù)的游標定義declare myfirstcursor cursorforselect sname,cname,gradefrom student,course,scwhere student.sno=sc.snoand o=o打開open myfirstcursorgo讀取fetch next from myfirstcursorGo關閉游標close myfirstcursor刪除游標deallocate myfirstcursor例2定義一個可以向任意位置讀取數(shù)據(jù)的游標declare mysecondcursor cursorscrollforselect sname,cname,gradefrom student,course,scwhere student.sno=sc.snoand o=o打開open mysecondcursorgo讀取fetch next from mysecondcursorGo按絕對位置讀取fetch absolute 3 from mysecondcursor按相對位置讀取fetch relative -2 from mysecondcursor讀取最后一條記錄fetch last from mysecondcursorgo關閉游標close mysecondcursor刪除游標deallocate mysecondcursor例3定義一個可以向任意位置讀取數(shù)據(jù)的游標,利用游標逐個讀取數(shù)據(jù)定義declare mythirdcursor cursorscrollforselect sname,cname,gradefrom student,course,scwhere student.sno=sc.snoand o=ogo打開Open mythirdcursorgo讀取fetch first from mythirdcursorgowhile fetch_status-1 fetch next from mythirdcursor關閉Close mythirdcursor刪除Deallocate mythirdcursor【任務2】在st數(shù)據(jù)庫中完成以下作業(yè)(1)利用游標查找所有計科系的學生信息(2)定義可以向任意位置讀取數(shù)據(jù)的游標,顯示學生姓名、選修的門數(shù)、和平均成績。并順序逐個讀取其中的數(shù)據(jù)。然后分別顯示第3條記錄,第1條記錄和最后1條記錄。(3)創(chuàng)建一游標,逐行顯示Student表中的記錄,要求按學號+-+姓名+-+性別+-+所在系格式輸出。三、存儲過程存儲過程類似一個函數(shù)定義存儲過程的語法(詳細語法可以參考SQL Server聯(lián)機叢書) CREATE PROCEDURE 存儲過程名 參數(shù)1 數(shù)據(jù)類型 = 默認值 OUTPUT, , 參數(shù)n 數(shù)據(jù)類型 = 默認值 OUTPUT AS SQL語句 GO和C語言的函數(shù)一樣,參數(shù)可選參數(shù)分為輸入?yún)?shù)、輸出參數(shù) 輸入?yún)?shù)允許有默認值 設計1(無默認值 無輸出型)CREATE PROCEDURE proc_stu testgrade int -成績 AS print 查詢成績高于給定成績的學生成績信息SELECT sname 學生姓名,cname 課程名,grade 成績from Student,course,scwhere student.sno=sc.snoand o=oand gradetestgrade GO調用 exec proc_stu 80設計2(有默認值 有輸出型)CREATE PROCEDURE proc_stu1count int OUTPUT, sdept char(2)=cs ASSELECT sdept 所在系FROM studentWhere sdept=sdeptGroup by sdept SELECT count=count(*)FROM studentWhere sdept=sdeptGroup by sde

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論