遊標,遊標是什麼

來源:互聯網
上載者:User

遊標,遊標是什麼

一、實驗目的

1、掌握建立遊標的方法和步驟;

2.掌握遊標的使用方法;

二、實驗內容

1、遊標的建立;

2、遊標的使用方法。

三、實驗步驟

1、遊標的建立。

1)使用S_C資料庫中的S表、C表、SC表建立一個預存程序—sp_CURSOR1。該預存程序的作用是:顯示所有的課程資訊,如果成績>=90顯示成績本身;成績>=80顯示良;成績>=70顯示中;成績>=60顯示及格;成績>=0顯示不及格;如果沒有成績則顯示無成績。資訊還包含學號,姓名,課程和成績,顯示格式如下:學號---姓名---課程---成績,1所示。

要求使用遊標技術實現上述要求,使用Print語句實現顯示。

 

圖1 成績顯示格式

sp_CURSOR1的建立語句:

IF EXISTS(SELECT name FROM sysobjects WHERE name = 'sp_CURSOR1' AND type = 'P')

DROP PROCEDURE sp_CURSOR1

GO

CREATE PROCEDURE sp_CURSOR1

AS

BEGIN

DECLARE @sno char(10)

DECLARE @name char(10)

DECLARE @cno char(10)

DECLARE @grade int

DECLARE S_CURSOR CURSOR

FOR

SELECT S.sno, S.sname, C.cname, SC.grade FROM SC, S, C

WHERE S.sno = SC.sno AND SC.cno = C.cno

OPEN S_CURSOR

FETCH NEXT FROM S_CURSOR INTO @sno, @name, @cno, @grade

WHILE @@FETCH_STATUS = 0

BEGIN

IF @grade IS NULL

PRINT RTRIM(@sno) +'---'+ RTRIM(@name) +'---'+ RTRIM(@cno) +'---無成績'

ELSE IF @grade >= 90 

PRINT RTRIM(@sno) +'---'+ RTRIM(@name) +'---'+ RTRIM(@cno) +'---'+CONVERT(VARCHAR(20), @grade)

ELSE IF @grade >= 80

PRINT RTRIM(@sno) +'---'+ RTRIM(@name) +'---'+ RTRIM(@cno) +'---良'

ELSE IF @grade >= 70

PRINT RTRIM(@sno) +'---'+ RTRIM(@name) +'---'+ RTRIM(@cno) +'---中'

ELSE IF @grade >= 60

PRINT RTRIM(@sno) +'---'+ RTRIM(@name) +'---'+ RTRIM(@cno) +'---及格'

ELSE IF @grade >= 0

PRINT RTRIM(@sno) +'---'+ RTRIM(@name) +'---'+ RTRIM(@cno) +'---不及格'

FETCH NEXT FROM S_CURSOR INTO @sno, @name, @cno, @grade

END

CLOSE S_CURSOR

DEALLOCATE S_CURSOR

END

結果描述:

 

2、遊標的使用。

計算銀行利息。有一儲戶帳號為0001,銀行存取記錄如下:

交易日期

交易金額

賬戶餘額

備忘

2010-10-01

10000

10000

開戶存入

2010-12-20

20000

30000

 

2011-02-03

-5000

25000

 

2011-05-01

-3000

22000

 

2011-10-10

6000

28000

 

存取記錄資料表名為fundlist,欄位名為id(編號,int),cid(儲戶帳號,varchar(20)),ex-date(交易日期,datetime),ex-money(交易金額,money),balance(賬戶餘額,money)。根據有關規定,銀行存款利息為:2011-04-01號之前(包括)為年利息2%,之後(不包括)為年利息3%,請用編寫一個預存程序sp_cal_interest用來計算該儲戶的當前利息,要求利用遊標實現。說明:當前用getdate()表示,年利息2%用存入的天數*2%/365表示利息。

IF EXISTS(SELECT name FROM sysobjects WHERE name = 'sp_cal_interest' AND type = 'P')

DROP PROCEDURE sp_cal_interest

GO

CREATE PROCEDURE sp_cal_interest

AS

DECLARE @time datetime

DECLARE @money money

DECLARE @pretime datetime

DECLARE @all money

DECLARE @lixi money

DECLARE @T datetime

BEGIN

SET @T = CAST('2011-04-01' AS datetime)

DECLARE f_cursor CURSOR FOR

SELECT ex_date, balance FROM fundlist

OPEN f_cursor

FETCH NEXT FROM f_cursor INTO @time, @money

SET @pretime = @time

SET @all = @money

WHILE @@FETCH_STATUS = 0

BEGIN

IF @time <= @T

SET @lixi = @all*DATEDIFF(DAY, @pretime, @time)*0.02/365

ELSE IF @time > @T AND @pretime <= @T

SET @lixi = @all*DATEDIFF(DAY, @pretime, @T)*0.02/365

+@all*DATEDIFF(DAY, @T, @time)*0.03/365

ELSE

SET @lixi = @all*DATEDIFF(DAY, @pretime, @time)*0.03/365

SET @all = @all+@lixi+@money

SET @pretime = @time

FETCH NEXT FROM f_cursor INTO @time, @money

END

PRINT @lixi

CLOSE f_cursor

DEALLOCATE f_cursor

END 

四、實驗總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.