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

数据库第六次作业


实验十一 存储过程 实验十二 触发器
一:实验目的和要求: 掌握存储过程的创建及调用。 理解触发器的工作原理, 掌握如何使用 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次)_计算机软件及应用_IT/计算机_专业资料。实用数据库上机作业建立二张数据表, 一张是员工信息表(Employee), 一张是部门信息表(Department...

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

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

第六次作业

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

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

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

数据库四五六章作业答案

暂无评价|0人阅读|0次下载|举报文档数据库四五六章作业答案_IT认证_资格考试/认证_教育专区。数据库系统概论 第四章作业 1. 什么是数据库安全性? 数据库安全性...

数据库作业第六章

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

第六次作业

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

数据库作业

作业数据库 11页 免费数​据​库​作​业 暂无评价|0人阅读|0次下载|举报文档第六章课后作业 一.选择题 1 A 2 ,A 3,D 4, D 二.填空题 (1...

第六-七次作业及答案

第六-七次作业及答案_英语考试_外语学习_教育专区。第六次作业 1、若数组 ARRAY 在数据段中已作如下定义 ARRAY DW 100 DUP (123H,3 DUP (?) ),1234H 则...

计算机第六次作业

计算机第六次作业_互联网_IT/计算机_专业资料。题目 1 新买回来的从未格式化...尼姆达 正确答案是:CHI 病毒 题目 11 关于数据加密说法正确的是___。 选择一项...
更多相关标签:
数据库技术第二次作业 | 数据库第二次作业 | 数据库作业 | 数据库大作业 | 数据库第一章作业 | access数据库大作业 | 大学access数据库作业 | sqlserver数据库作业 |
网站地图

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