【正文】
dept FROM student$OPEN c3FETCH NEXT FROM c3 into @deptWHILE @@fetch_status=0BEGINPRINT @deptDECLARE c4 CURSOR FOR SELECT sname,dept FROM student$WHERE dept=@deptOPEN c4FETCH NEXT FROM c4 INTO @sname,@deptWHILE @@fetch_status=0BEGINPRINT @sname+@deptFETCH NEXT FROM c4 INTO @sname,@dept ENDCLOSE c4DEALLOCATE c4PRINT39。=====================39。FETCH NEXT FROM c3 INTO @deptENDCLOSE c3DEALLOCATE c3圖1120 游標(3)的顯示樣式(4),用游標對Job表數據進行如下修改:將工作級別相同的工作只保留工作編號較小的一項工作,同時,將這些工作的工作描述拼接為一個工作描述,中間用逗號分隔。修改后的數據示意如表113所示。表113 改造后的Job表數據JobidDescLevelJ01軟件開發(fā),軟件測試10J02硬件開發(fā),硬件測試12J04硬件維護8DECLARE cur_Job CURSOR FOR SELECT * FROM Job。DECLARE @ojdesc VARCHAR(40)DECLARE @jobno CHAR(4),@jdesc VARCHAR(40),@level TINYINTOPEN cur_JobFETCH NEXT FROM cur_Job INTO @jobno,@jdesc,@levelWHILE @@FETCH_STATUS = 0BEGIN SET @ojdesc = @jdesc DECLARE @injobno CHAR(4),@injdesc VARCHAR(40) DECLARE incur_Job CURSOR FOR SELECT jobid,decs FROM Job WHERE lvl=@level and jobid != @jobno OPEN incur_Job FETCH NEXT FROM incur_Job INTO @injobno,@injdesc WHILE @@FETCH_STATUS = 0 BEGIN SET @ojdesc = @ojdesc + 39。,39。 + @injdesc print @ojdesc DELETE FROM Job WHERE Jobid = @injobno FETCH NEXT FROM incur_Job INTO @injobno,@injdesc END PRINT @ojdesc CLOSE incur_Job DEALLOCATE incur_Job UPDATE Job SET decs=@ojdesc WHERE Jobid = @jobno SET @ojdesc = 39。39。 FETCH NEXT FROM cur_Job INTO @jobno,@jdesc,@levelENDCLOSE cur_JobDEALLOCATE cur_Job(5),實現(xiàn)按日統(tǒng)計每日的累計訂單總額,處理后結果如圖1121所示。圖1121 具有日累計訂單金額信息的數據declare @sum decimal(18,2),@orderamt decimal(18,2),@orderdate date,@orderdate_old datedeclare cur_sum cursor for select orderamt from [order]declare cur_date cursor for select orderdate from [order] open cur_sumopen cur_datefetch next from cur_sum into @orderamtfetch next from cur_date into @orderdateset @sum=0while @@FETCH_STATUS=0begin if (@orderdate!=@orderdate_old) set @sum=0 set @orderdate_old=@orderdate set @sum=@sum+@orderamt update [order] set [runningtotal] =@sum where current of cur_sum fetch next from cur_sum into @orderamt fetch next from cur_date into @orderdateendclose cur_sumclose cur_datedeallocate cur_sumdeallocate cur_dateselect * from [order]。五. 實驗總結本次試驗學習了索引,存儲過程,存儲過程、觸發(fā)器、用戶自定義函數與游標。通過對索引的學習,知道了索引的作用是加快數據的查詢效率。因為建立索引可以改變數據的搜索結構,索引多數情況下是建立在基本表上的,但可以建立在視圖上,經過與不建立索引對比,其效率提高不少。其中存儲過程類似于C語言中的函數,把查詢語句封裝成一個函數,可以傳如變量,但是注意的是,變量只能存一個數值,只能用循環(huán)方法顯示變量,使其顯示一組數據。存儲過程保存在數據庫中,可以隨時修改,并加密。對于觸發(fā)器,具有不同觸發(fā)性,要分清時候用前觸發(fā)還是后觸發(fā),一般與判斷語句結合,判斷是否回滾。 用戶自定義函數有兩種,一個是標量函數,一個是內聯(lián)表值函數,感覺內聯(lián)表值函數很好用,可以直接打印出多組數據,相應標量函數輸出結果比較單一。 編寫游標應注意前后游標的開關,移動,相對來說嵌套游標復雜些,應找好對應關系。雖然寫報告過程中遇到好多問題,還好及時與同學共同討論并加以解決。