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

数据库第六次作业


实验十一 存储过程 实验十二 触发器
一:实验目的和要求: 掌握存储过程的创建及调用。 理解触发器的工作原理, 掌握如何使用 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')


更多相关文档:

数据库第六次作业

数据库第六次作业 隐藏>> 实验十一 存储过程 实验十二 触发器一:实验目的和要求: 掌握存储过程的创建及调用。 理解触发器的工作原理, 掌握如何使用 inserted 表和...

实用数据库上机作业(第6次)

实用数据库上机作业(第6次)_计算机软件及应用_IT/计算机_专业资料。实用数据库上机作业建立二张数据表, 一张是员工信息表(Employee), 一张是部门信息表(Department...

数据库实验六(第六次作业)

数据库第六次作业 12页 免费 VFP实验6 数据库的操作 4页 1下载券喜欢...2. 了解 SQL Server 的数据备份和恢复机制 掌握 SQL Server 的数据备份和恢复...

数据库第六次作业-页

数​据​库​第​六​次​作​业​-​页 暂无评价|0人阅读|0次下载|举报文档作业06 数据访问页一、选择题 1. 数据访问页是一个( )。 A....

西南大学《数据库技术》第6次作业答案

《​数​据​库​技​术​》​第​6​次​作​业​答...答:并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏’夕...

杨坦数据库第6章作业参考答案

杨坦数据库第6作业参考答案_财会/金融考试_资格考试/认证_教育专区 暂无评价|0人阅读|0次下载|举报文档杨坦数据库第6作业参考答案_财会/金融考试_资格考试/...

数据库作业第六章

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

第六次作业

第六次作业_计算机硬件及网络_IT/计算机_专业资料。使用装有 Windows 系统的 ...多媒体系统的最关键技术是数据的压缩和解压缩 反馈 正确答案是:多媒体系统只能...

实用数据库上机作业(第六次)

实用数据库上机作业(第六次)实用数据库上机作业(第六次)隐藏>> 实用数据库上机作业建立二张数据表, 一张是员工信息表(Employee), 一张是部门信息表(Department)...

第六次作业

第六次作业_互联网_IT/计算机_专业资料。第六次作业 一、填空题 1. 按下键盘上的 Delete 键,可以删除插入点所在位 置___侧的文字。 2. 在 Word2010 文档...
更多相关标签:
数据库第六章作业 | 数据库原理第六章作业 | 数据库第二次作业 | 数据库第三次作业 | 数据库大作业 | 数据库作业 | access数据库大作业 | 数据库平时作业 |
网站地图

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