当前位置:首页 >> 其它课程 >> 数据库第六次作业

数据库第六次作业


实验十一 存储过程 实验十二 触发器
一:实验目的和要求: 掌握存储过程的创建及调用。 理解触发器的工作原理, 掌握如何使用 inserted 表和 deleted 表及如何创建: INSERT、 UPDATE、DELETE 触发器。 二:实验类型:设计验证 三:实验内容: 一:有学员成绩数据库 stu,其中学员信息表 stuinfo 和学生成绩表 stumarks 如下 CREATE DATABASE STUINFO

USE STU CREATE TABLE STUINFO ( STUNAME VARCHAR(50), STUNO VARCHAR(50) PRIMARY KEY, STUSEX VARCHAR (50), STUAGE VARCHAR(50), STUADDRESS VARCHAR(50), )

CREATE TABLE STUMARKS ( EXAMNO VARCHAR(10) PRIMARY KEY, STUNO VARCHAR(20), WRITTENEXAM INT, LABEXAM INT, FOREIGN KEY(STUNO) REFERENCES STUINFO(STUNO), )

输入数据
USE STU INSERT INTO STUINFO VALUES('张秋丽','s25301','男','18','北京') INSERT INTO STUINFO VALUES('李文才','s25302','男','28','地址不详') INSERT INTO STUINFO VALUES('李斯文','s25303','女','22','河南') INSERT INTO STUINFO VALUES('欧阳俊雄','s25304','女','34','新疆') INSERT INTO STUINFO VALUES('梅超风','s25305','女','23','地址不详') USE STU INSERT INTO STUMARKS VALUES('s271811','s25303','93','59') INSERT INTO STUMARKS VALUES('s271813','s25302','63','91') INSERT INTO STUMARKS VALUES('s271816','s25301','90','83') INSERT INTO STUMARKS VALUES('s271818','s25305','63','53')

1.请创建存储过程,查看本次考试平均分以及未通过考试的学员名单 CREATE PROCEDURE STU AS DECLARE @A INT,@B INT,@C VARCHAR(20),@D VARCHAR(20),@E VARCHAR(20),@F INT,@G INT SELECT @A=AVG(WRITTENEXAM),@B=AVG(LABEXAM) FROM STUMARKS BEGIN

IF @A>70 AND @B>70 SET @C=’成绩优秀’
ELSE SET @C=’本班成绩较差’ END PRINT ‘笔试平均分为:’+CONVERT(VARCHAR,@A) PRINT ‘机试平均分为:’+CONVERT(VARCHAR,@B) PRINT’本班考试成绩:’+CONVERT(VARCHAR,@C) PRINT’****************************’ PRINT’参加考试没有通过的学生’ PRINT’***** ***** ******* ********’ PRINT’STUNAME STUNO WRITTENEXAM LABEXAM’ PRINT’***** ***** ******* ********’ DECLARE STUDE CURSOR FOR SELECT STUNAME,STUMARKS.STUNO,WRITTENEXAM,LABEXAM FROM STUINFO,STUMARKS WHERE STUINFO.STUNO=STUMARKS.STUNO AND (WRITTENEXAM<60 OR LABEXAM<60) OPEN STUDE FETCH NEXT FROM STUDE INTO @D,@E,@F,@G WHILE @@FETCH_STATUS=0 BEGIN PRINT @D+’ ’+@E+’ +CONVERT(VARCHAR(5),@F)+’’+CONVERT(VARCHAR(5),@G) FETCH NEXT FROM STUDE INTO @D,@E,@F,@G END CLOSE STUDE DEALLOCATE STUDE EXEC STU



2.修改上题:由于每次考试的难易程度不一样,每次笔试和机试的及格线可能随时 变化(不再是60分),这导致考试的评判结果也相应变化。(提示:使用带输入参 数的存储过程)
DROP PROC STUD CREATE PROCEDURE STUD @P INT OUTPUT,@Q INT OUTPUT AS

DECLARE @A INT,@B INT,@C VARCHAR(20),@D VARCHAR(20),@E VARCHAR(20),@F INT,@G INT SELECT @A=AVG(WRITTENEXAM),@B=AVG(LABEXAM) FROM STUMARKS
BEGIN IF @A>@Q AND @B>@Q

SET @C=’成绩优秀’
ELSE SET @C=’本班成绩较差’ END PRINT ‘笔试平均分为:’+CONVERT(VARCHAR,@A) PRINT ‘机试平均分为:’+CONVERT(VARCHAR,@B) PRINT’本班考试成绩:’+CONVERT(VARCHAR,@C) PRINT’****************************’ PRINT’参加考试没有通过的学生’ PRINT’***** ***** ******* ********’

PRINT’STUNAME STUNO WRITTENEXAM LABEXAM’ PRINT’***** ***** ******* ********’ DECLARE STUDE CURSOR FOR SELECT STUNAME,STUMARKS.STUNO,WRITTENEXAM,LABEXAM FROM STUINFO,STUMARKS WHERE STUINFO.STUNO=STUMARKS.STUNO AND(WRITTENEXAM<@P OR LABEXAM<@P) OPEN STUDE FETCH NEXT FROM STUDE INTO @D,@E,@F,@G WHILE @@FETCH_STATUS=0 BEGIN PRINT @D+’ ’+@E+’ +CONVERT(VARCHAR(5),@F)+’’+CONVERT(VARCHAR(5),@G) FETCH NEXT FROM STUDE INTO @D,@E,@F,@G END CLOSE STUDE DEALLOCATE STUDE EXEC STU(‘70’,’75’)



3、修改上题:返回未通过考试的学员人数。 (提示:使用带输出参数的存储过程) DROP PROC STUDENT

CREATE PROCEDURE STUDENT @N INT OUTPUT AS SELECT @N=COUNT(*) FROM STUMARKS WHERE WRITTENEXAM<60 OR LABEXAM<60 PRINT(’结果’) DECLARE @N INT EXEC STUDENT @N OUTPUT PRINT(’没通过的人数为:’+CONVERT(VARCHAR(10),@N)

二:建立银行业务数据库 bankdb,其中,帐户信息表(bank)存放帐户的信息,交易 信息表(transInfo)存放每次的交易信息。
CREATE TABLE BANK ( customername varchar(20), cardID varchar(10) , currentMoney float(4) )

CREATE TABLE TRANSINFO ( transDate datetime ,

cardID VARCHAR(50), transType varchar(20) , check ( transType='支取' or transType='存入'), transMoney float(4), )

use bankdb INSERT INTO BANK VALUES('张三','1001 0001','1000.0000') INSERT INTO BANK VALUES( '李四','1001 10002','1.0000')

USE BANKDB INSERT INTO TRANSINFO VALUES('2005-10-11 11:30:46.623','1001 0001','支

取','200.0000')

1、 当向交易信息表(transInfo)中插入一条交易信息时,自动更新对应帐户的余 额。 2、当删除交易信息表时,要求自动备份被删除的数据到表 backupTable 中。
3、跟踪用户的交易,交易金额超过 20000 元,则取消交易,并给出错误提示。

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'transInfo_in' AND type = 'TR') DROP TRIGGER transInfo_in GO

CREATE TRIGGER transInfo_in ON transInfo FOR INSERT AS DECLARE @i_transDate datetime, @i_cardid int, @i_transtype varchar(20), @i_transmoney float(4)

if exists (select 1 from select 1 from deleted) begin --查询插入信息

inserted)

and

not

exists

(

SELECT @i_cardid =cardID, @i_transtype = transType, @i_transmoney = transMoney FROM inserted --判断是否有插入信息 IF (isnull(@i_cardid,0) <> 0 ) BEGIN if (@i_transmoney>20000) --判断大于 20000 给出错误提示,并回滚 begin RAISERROR ('交易金额大于 20000 元!', 16, 1) ROLLBACK TRANSACTION end else begin update bank set currentMoney=currentMoney +(case @i_transtype when ' 支取' then -@i_transmoney when '存入' then @i_transmoney else 0 end) where cardID=@i_cardid end END end

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'transInfo_del' AND type = 'TR') DROP TRIGGER transInfo_del GO

CREATE TRIGGER transInfo_del ON transInfo for DELETE as DECLARE @i_transDate datetime, @i_cardid int, @i_transtype varchar(20), @i_transmoney float(4) set @i_cardid=0 if not exists (select 1 select 1 from deleted) begin --查询删除信息 SELECT @i_transDate=transDate , from inserted) and exists (

@i_cardid =cardID, @i_transtype = transType, @i_transmoney = transMoney FROM deleted

IF (isnull(@i_cardid,0) <> 0 ) --查询是否有删除信息

BEGIN --更新主表信息 update bank set currentMoney=currentMoney +(case @i_transtype when ' 支取' then @i_transmoney when '存入' then -@i_transmoney else 0 end) where cardID=@i_cardid --插入备份表信息 insert into backupTable values (@i_transDate, @i_cardid , @i_transtype, @i_transmoney) END End

insert into transinfo values('2005-10-10 11:00:00.000','1001 1001','支 取','100.0000')


赞助商链接
更多相关文档:

华中科技大计算机基础第六次作业

华中科技大计算机基础第六次作业 - 作业提交注意事项: 1.直接给出题号和答案即可,不需要提交答题步骤,也不要将原题目放上去。 2.作业不要以附件形式提交,否则...

交大第六次作业

交大第六次作业_法律资料_人文社科_专业资料。在 TCSEC 的标准中,最低的安全...数据库系统安全 c. 网络系统安全 d. 硬件系统安全 反馈正确答案是:操作系统...

交大计算机第六次作业

交大计算机第六次作业_互联网_IT/计算机_专业资料。题目 1 正确 获得 1.00 ...较强的联网功能和数据库能力 b. 较大的体积 c. 大多数基于 Client/Server ...

计算机基础第6次作业

计算机基础第6次作业_院校资料_高等教育_教育专区。《计算机基础(2008 版)》第...数据库与应用软件 C.网络中的计算机资源主要指计算机硬件、软件、数据 D.网络中...

SQL server数据库第五、六章作业

第六次作业创建SQL Serv... 6页 1下载券 SQL Server 数据库第一次... 4..._[ai]%?; 下面包含 ename 列的值为( A,C )的数据行可能被删除。 A....

数据库作业第六章

暂无评价|0人阅读|0次下载|举报文档 数据库作业第六章_理学_高等教育_教育专区。第六作业一. 简答题 1. 关系模式可能存在的问题?答:插入异常:元素差不进去...

交大计算机第6次作业

交大计算机第6次作业_电脑基础知识_IT/计算机_专业资料。开始时间 完成于 耗时 ...数据库系统安全 d. 操作系统安全 反馈 正确答案是:操作系统安全 题目 16 正确...

数据库平时作业题

暂无评价|0人阅读|0次下载|举报文档 数据库平时作业题_工学_高等教育_教育专区...第六章 不作考试的内容 第七章 1. 账号 A 到账号 B 转账 50 元钱 1 ...

《计算机基础(2008版)》第6次作业

《计算机基础(2008版)》第6次作业_医学_高等教育_教育专区。说明:本次作业的知识...数据库与应用软件 C.网络中的计算机资源主要指计算机硬件、软件、数据 D.网络...

数据库作业第六章

暂无评价|0人阅读|0次下载|举报文档 数据库作业第六章_IT/计算机_专业资料。第六作业 一. 简答题 1. 关系模式可能存在的问题?问题产生的根源? 关系模式可...

更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com