• 励志大全
  • 名言大全
  • 成功学
  • 励志文章
  • 励志故事
  • 励志名言
  • 励志电影
  • 励志歌曲
  • 高考励志
  • 大学生励志
  • 青春励志
  • 职场励志
  • 高三励志
  • 当前位置: 工作范文网 > 励志 > 励志故事 > 正文

    数据库第四次实验报告

    时间:2020-11-21 09:50:45 来源:工作范文网 本文已影响 工作范文网手机站

    南昌航空大学实验报告

    二0一 年 月 日

    课程名称: 数据库概论 实验名称: 存储过程及触发器

    班级: 姓名: 同组人:

    指导教师评定: 签名:

    实验参考代码及结果

    存储过程:

    创建存储过程

    9.11

    CREATE PROCEDURE Select_S AS SELECT * FROM S WHERE sex='女'

    GO

    Execute Select_S

    9.12

    CREATE PROCEDURE InsRecToS(@sno char(5),@sn varchar(8),@sex char(2)='男',@age int,@dept varchar(20))

    AS INSERT INTO S VALUES(@sno,@sn,@sex,@age,@dept)

    GO

    Execute InsRecToS @sno='S8',@sn='罗兵',@age='18',@dept='信息'

    执行前:

    执行后:

    9.13

    CREATE PROCEDURE Query_S(@Sno char(5),@SN VARCHAR(8) OUTPUT,@Age SMALLINT OUTPUT)

    AS

    SELECT @sn=sn,@age=age

    FROM S

    WHERE Sno=@Sno

    (2)执行存储过程

    Declare @SN VARCHAR(8),@AGE SMALLINT

    execute Query_S '98010',@SN OUTPUT,@AGE OUTPUT

    SELECT @SN,@AGE

    (3)查看和修改存储过程

    9.14

    ALTER PROCEDURE[dbo].[InsRecTos] (@sno char(5),@sn varchar(8),@sex char(2)='女',@age smallint,@dept varchar(20))

    AS

    INSERT

    INTO S

    VALUES(@sno,@sn,@sex,@age,@dept)

    (4)查看、重命名和删除存储过程

    9.15

    exec sp_helptext Select_S

    9.16

    sp_rename Select_S,Select_Student

    执行后:

    9.17

    DROP PROCEDURE Select_Student

    执行后:

    (5)在DingBao数据库中创建存储过程C_P_Proc,实现参数化查询顾客订阅信息,查询参数为顾客姓名,要求能查询出参数指定顾客的顾客编号、顾客名、订阅报纸名及订阅报纸份数等信息。

    CREATE PROCEDURE C_P_Proc(@ccna varchar(10),@cno char(4) OUTPUT,@cna varchar(10) OUTPUT,@pna varchar(20) OUTPUT,@num int OUTPUT)

    AS

    SELECT @cna=cna,@cno=cp.cno,@pna=pna,@num=num

    FROM cp,customer,paper

    WHERE customer.cno=cp.cno AND paper.pno=cp.pno AND cna=@ccna;

    (6)执行存储过程C_P_Proc,实现对“李涛”等不同顾客的订阅信息的查询。

    Declare @cno char(4),@cna varchar(10),@pna varchar(20) ,@num int

    execute C_P_Proc '李涛',@cno OUTPUT,@cna OUTPUT,@pna OUTPUT,@num OUTPUT

    SELECT @cno,@cna,@pna,@num

    (7)删除储过程C_P_Proc

    DROP PROCEDURE C_P_Proc

    执行前:

    执行后:

    触发器:

    创建触发器

    10.19

    CREATE TRIGGER TR_S_Age_update on S

    for update as

    declare @iAge int;

    select @iAge=age

    from inserted

    if @iAge<8 or @iAge>45

    begin

    raiserror('学生年龄应该大于等于,并小于等于',16,1)

    rollback transaction

    end

    执行:

    UPDATE s

    SET age=48

    WHERE sno='98010'

    10.20

    CREATE TRIGGER Change_S_Sel ON S

    FOR INSERT,UPDATE,DELETE

    AS

    SELECT *

    FROM S

    执行:

    (2)触发器的引用

    INSERT

    if exists(select name from sysobjects where name='TR_C_insert' and type='TR')

    DROP TRIGGER TR_C_insert

    go

    CREATE TRIGGER TR_C_insert ON c

    for insert as

    declare @iCT int;

    SELECT @iCT=CT

    FROM inserted

    if @iCT <1 or @iCT>10

    begin

    raiserror('课程学分应大于等于,小于等于.',16,1)

    rollback transaction

    end

    执行:

    INSERT

    INTO c(cno,cn,ct)

    VALUES ('C8','运筹学',0.5)

    DELETE

    CREATE TRIGGER TR_S_delete ON s

    for delete

    as

    declare @icount int

    select @icount=count(*)

    from deleted,sc

    where deleted.sno=sc.sno

    if @icount>=1

    begin

    raiserror('该学生在表SC中北引用,展示不能被删除!',16,1)

    rollback transaction

    end

    执行:

    DELETE

    FROM s

    WHERE sno='98010'

    (3)查看、修改和删除触发器

    修改触发器

    ALTER trigger [TR_S_Age_update]on[dbo].[s]

    for update as

    declare @iAge int;

    select @iAge=age

    from inserted

    if @iAge<8 or @iAge>45

    begin

    raiserror('学生年龄应该大于等于,并小于等于',16,1)

    rollback transaction

    end

    使用系统存储过程查看触发器

    sp_depends 'Change_S_Sel'

    sp_helptext 'Change_S_Sel'

    Exec sp_help 'Change_S_Sel'

    删除触发器

    10.24

    DROP TRIGGER TR_S_Age_update

    执行前:

    执行后:

    (4)

    1.

    CREATE TRIGGER TR_PAPER_I ON paper

    for insert as

    declare @ippr money,@ipno char(6)

    select @ippr=ppr,@ipno=pno

    from inserted

    if @ippr<0 or @ippr is NULL

    begin

    update paper

    set ppr=10

    where pno=@ipno

    end

    执行:

    INSERT

    INTO paper(pno,pna,ppr)

    VALUES('000006','江西日报',-9)

    2.

    CREATE TRIGGER TR_PAPER_D ON paper

    for delete

    as

    declare @ipno char(6)

    select @ipno=cp.pno

    from deleted,cp

    where deleted.pno=cp.pno

    begin

    delete

    from cp

    where pno=@ipno

    end

    执行:

    delete

    from paper

    where pno='000001'

    3.

    CREATE TRIGGER TR_PAPER_U ON paper

    for update

    as

    declare @ippr money

    select @ippr=ppr

    from inserted

    if @ippr<0 or @ippr is NULL

    begin

    raiserror('输入单价不正确!',16,1)

    rollback transaction

    end

    执行:

    UPDATE paper

    SET ppr=-8

    WHERE pno='000002'

    5.

    CREATE TRIGGER safety ON DATABASE

    FOR ALTER_TABLE,DROP_TABLE

    AS

    PRINT'你必须失效DDL触发器"safety"后,才能删除或修改数据库表!'

    ROLLBACK;

    执行:

    DROP TABLE cp

    实验总结

    通过本次实验,我基本了解掌握了存储过程及触发器的基本操作及相关语法。

    • 下载文档
    • 收藏
    • 0

    有关的专题