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

数据库第六次作业


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


更多相关文档:

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

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

第六次作业创建SQL Server 2000数据库和表

第六次作业创建SQL Server 2000数据库和表 !!隐藏>> 实验六 实验六 创建 SQL Server 2000 数据库和表 专业: 信息管理与信息系统 专业: 实验地点: 实验地点:...

第六次作业

第六次作业_计算机硬件及网络_IT/计算机_专业资料。使用装有 Windows 系统的 PC...数据库第六次作业 12页 免费 公司概论第六次作业 3页 免费 第六次作业及...

第六次作业

第六次作业_理学_高等教育_教育专区。第六次作业一、 单选题 1、SQL Server ...DECLARE @abc int D、CREATE DATABASE sti 9、表达式'123' + '456'的结果是...

数据库作业

数据库第六次作业 12页 免费 数据库第四章作业 2页 免费 数据库作业1 4页...1 系统的分析和设计确定开发数据库系统后,就要进行系统的分析,包括需求、目的、...

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

华中科技大计算机基础第六次作业_电脑基础知识_IT/计算机_专业资料。计算机基础...A.较大的体积 B.较强的联网功能和数据库能力 C.基于客户/服务器模型进行工作...

交大计算机第六次(6次)作业

A、打开某个主页 B、阅读网上新闻 A、病毒软件要经常进行升级 C、病毒库由...对程序和数据的破坏 s9AudoVk46 上海交通大学网络课程 2015 年第六次作业 网络...

《数据库原理》作业参考答案6

数据库原理》作业参考答案6_管理学_高等教育_教育专区。作业参考答案6 KANDA《数据库原理》作业参考答案 6 《数据库原理》 第六次 (P41) ) 8.试述概念模型...

数据库作业

数据库作业第四章 2页 1财富值 数据库作业第三章 8页 1财富值 数据库第五章作业 3页 1财富值 数据库作业 第二章 3页 1财富值 数据库第六次作业 12页...

第六次作业

第六次作业_互联网_IT/计算机_专业资料。2、简述(如有必要画图辅助)EPON 接入网中,由 OLT 到 ONU 上下行数据传送的原理。 EPON 系统采用 WDM 技术, 实现单纤...
更多相关标签:
网站地图

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