数据库管理实务(三)存储过程

存储过程

目录

存储过程

创建数据库、创建表

编写存储过程-创建执行对象插入值

编写存储过程-生成种族地区函数

编写存储过程-查看存储结果

编写存储过程-更新数据函数

编写存储过程-执行更新数据函数

实验后的数据结果对比

第6行数据对比:报考西部地区的非少数民族考生总分加10分;

第1行数据对比:报考非西部的少数民族考生总分加10分;

第10行数据对比:报考西部的少数民族考生总分加15分

实验总结:


创建数据库、创建表

代码如下:

create table Score

(

   sid int PRIMARY KEY, /*学生准考证号*/

   target_district char(1), /*考生报考地区 ‘e’、’s’、‘w’、’n’分别代表东、南、西、北*/

   total_score int,/*考生总分*/

   race char(20) /*考生所属民族、种族*/

)

GO

截图如下:

 

编写存储过程-创建执行对象插入值

代码如下:

CREATE PROC [dbo].score_generator

@id int,

@tar_dis char(1),

@t_s int,

@r char(20)

AS

INSERT INTO [dbo].Score VALUES (@id,@tar_dis,@t_s,@r);

GO

截图如下:

编写存储过程-生成种族地区函数

代码如下:

DECLARE @index int,

@Set_id int,

@Set_tar_dis char(1),

@Set_t_s int,

@Set_r char(20),

@rand int,

@flag int

SET @index = 1

SET @flag = 0

SET NOCOUNT ON; 

SET IMPLICIT_TRANSACTIONS OFF

BEGIN TRAN BULKINSERT

WHILE @index < 1000

BEGIN

IF(@index % 10 = 0)

    BEGIN

 

        BEGIN TRANSACTION BULKINSERT

    END

    SET @rand = RAND() * 100

    SET @Set_id = @index

    SET @Set_tar_dis = ( CASE WHEN (@rand % 4 = 0) THEN 'W'

                        WHEN (@rand %4 = 1) THEN 'E'

                        WHEN (@rand %4 = 2) THEN 'N'

                        ELSE 'S'

                        END)

    SET @Set_t_s = @rand

    SET @Set_r = ( CASE WHEN (@rand % 10 = 0) THEN '汉族'

                        WHEN (@rand %10 = 1) THEN '满族'

                        WHEN (@rand %10 = 2) THEN '回族'

                        WHEN (@rand %10 = 3) THEN '土家族'

                        WHEN (@rand % 10 = 4) THEN '苗族'

                        WHEN (@rand %10 = 5) THEN '壮族'

                        WHEN (@rand %10 = 6) THEN '蒙古族'

                        WHEN (@rand %10 = 7) THEN '维吾尔族'

                        WHEN (@rand % 10 = 8) THEN '瑶族'

                        WHEN (@rand %10 = 9) THEN '傣族'

                        ELSE '朝鲜族'

                        END)

    EXEC [dbo].score_generator @id = @Set_id,@tar_dis = @Set_tar_dis,@t_s = @Set_t_s, @r = @Set_r

    IF(@index % 10 = 0)

        BEGIN

        IF(@@ROWCOUNT = 10)

            BEGIN

                COMMIT TRANSACTION BULKINSERT

            END

        IF(@@ROWCOUNT != 10)

            BEGIN

                ROLLBACK  TRANSACTION BULKINSERT

            END

        END

    SET @index = @index + 1;

END

截图如下:

编写存储过程-查看存储结果

代码如下:

SELECT *

FROM [dbo].[Score];

截图如下:

编写存储过程-更新数据函数

代码如下:

create proc update_score

as

begin

declare @target_district char(1),@total_score int,@race char(20)

declare yb cursor scroll

for select target_district,total_score,race from dbo.Score

open yb

fetch next from yb

into @target_district,@total_score,@race

while @@FETCH_STATUS=0

begin

if(@target_district='w')

begin

if(@race='汉族') 

update dbo.Score set

total_score+=10 where current of yb

else

update dbo.Score set

total_score+=15 where current of yb

end

else  

if(@race!='汉族')

update dbo.Score set

total_score+=10 where current of yb

if(@total_score>750)

update dbo.Score set

total_score=750 where current of yb

fetch next from yb into @target_district,@total_score,@race

end

close yb

deallocate yb

end

 

截图如下:

 

编写存储过程-执行更新数据函数

代码如下:

execute update_score

截图如下:

实验后的数据结果对比

前:

后:

6行数据对比:报考西部地区的非少数民族考生总分加10分;

1行数据对比:报考非西部的少数民族考生总分加10分;

10行数据对比:报考西部的少数民族考生总分加15分

实验总结:

首先要熟悉整个实验的步骤,然后逐个去攻破,从整个实验来看,有几个函数需要执行,种族、地区、存储、更新数据等,在还没有进行实验之前,上网查询了解存储的过程,对整个存储过程有了概念,之后每个实验功能实现逐个学习,最后顺利完成实验。过程中加深了对游标的使用,加深了对存储过程的学习。

猜你喜欢

转载自blog.csdn.net/RayMa0305/article/details/81296473