数据库实验报告5-6次_第1页
数据库实验报告5-6次_第2页
数据库实验报告5-6次_第3页
数据库实验报告5-6次_第4页
数据库实验报告5-6次_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数据库原理实验报告实验名称学号姓名班级日期五 触发器、存储过程和函数2013302536张林江100113032015-10-31实验五:触发器、存储过程和函数1、 实验目的1. 掌握系统存储过程的使用用法。2. 掌握用户自定义的存储过程的创建和执行方法。3. 掌握触发器的创建和执行方法。4. 掌握用户自定义函数的创建和执行方法。2、 实验内容1、使用系统存储过程(sp_rename)将视图“V_SPJ”更名为“V_SPJ_三建”。(5分)sp_rename 'V_SPJ' , 'VSPJ_三建'2、针对SPJ数据库,创建并执行如下的存储过程:(共计35分)(

2、1) 创建一个带参数的存储过程jsearch。该存储过程的作用是:当任意输入一个工程代号时,将返回供应该工程零件的供应商的名称(SNAME)和零件的名称(PNAME)以及工程的名称(JNAME)。执行jsearch存储过程,查询“J1”对应的信息。(10分)CREATE Procedure jsearch(SPJ_JNO char(10)AS BEGIN SELECT SNAME,PNAME,JNAME FROM SPJ,S,P,J WHERE SPJ_JNO = SPJ.JNO AND SPJ.JNO = J.JNO ANDSPJ.PNO = P.PNO ANDSPJ.SNO = S.SNO

3、END; 输入下边命令,可得到结果jsearch 'J1' (2)使用S表,为其创建一个加密的存储过程jmsearch。该存储过程的作用是:当执行该存储过程时,将返回北京供应商的所有信息。(10分) CREATE PROC jmsearchWITH ENCRYPTIONASSELECT S.SNAME,S.SNO,S.STATUSFROM SWHERE S.CITY = '北京' (3) 使用系统存储过程sp_helptext查看jsearch, jmsearch的文本信息。(5分)EXEC sp_helptext jsearch EXEC sp_helptex

4、t jmsearch 因为刚才已经加密,所以无法看见 (4) 执行jmsearch存储过程,查看北京供应商的情况。(5分) EXEC jmsearch(5) 删除jmsearch存储过程。(5分)DROP PROCEDURE dbo.jmsearch3、 针对Student数据库,创建和执行如下的触发器:(共计40分)(1) 删除SC表上的外键约束,针对SC表创建一个名为insert_s的INSERT触发器。该触发器的功能:当用户向SC表中插入记录时,如果插入的cno值不是C表中Cno的已有值,则提示用户“不能插入记录这样的纪录”,否则提示“记录插入成功”。触发器创建成功之后,向SC表插入记录

5、,验证触发器是否正常工作。(5分) create trigger insert_s on SCfor insert asdeclare cnoo intselect cnoo from insertedif(not exists(select * from C where C.cno = cnoo)beginprint'不能插入记录这样的纪录'endelse print'记录插入成功'insert into SC values('95002','7','100')(2) 为S表创建一个名为dele_s1的DELET

6、E触发器,该触发器的作用是禁止删除S表中的记录。触发器创建成功之后,删除S表中的记录,验证触发器是否正常工作。(5分) CREATE trigger dele_s1 ON Sinstead of deleteas print'不能删除S表中记录'delete from Swhere S.sno = '95002'(3) 为S表创建一个名为dele_s2的DELETE触发器,该触发器的作用是删除S表中的记录时删除SC表中该学生的选课纪录。触发器创建成功之后,删除S表中的记录删除S表中的记录,验证触发器是否正常工作(SC表中的数据被正常删除)。(5分) create

7、 trigger dele_s2on S for delete as delete from SC where SC.sno in(select sno from deleted) delete from s where s.sno='95001'当再次查询SC表时可见95001 已经别删除了(4) 为S表创建一个名为update_s的UPDATE触发器,该触发器的作用是禁止更新S表中“sdept”字段的内容。触发器创建成功之后,更新S表中“sdept”字段的内容,验证触发器是否正常工作。(5分)create trigger update_s on S for updateas

8、 if update(sdept)beginprint '禁止更新sdept字段'rollback tranendupdate S set sdept = 'MA'where sno = '95002'(5) 禁用update_s触发器。禁用之后,更新S表中的“sdept”字段的内容,验证触发器是否还继续正常工作。(5分)alter table Sdisable trigger update_supdate S set sdept = 'MA'where sno = '95002'(6) 删除update_s触发器

9、。(5分) drop trigger update_s(7) 创建一个新的课程成绩统计表 CAvgGrade(Cno, Snum, examSNum, avgGrade),分别表示课号,选该课程的学生人数,参加考试人数,该门课程的平均成绩。利用触发器实现如下的功能:当SC表中有记录插入、删除或者更新时,自动更新表CAvgGrade。注意SC表中的grade为NULL时表明该学生还未参加考试,计算平均成绩时不需要计算该成绩,但是grade为0即考试成绩为0时,需要计算该成绩。(10分)create table CAvgGrade( Cno char(10), Snum char(10), exa

10、mSNum char(10),avgGrade char(4);初始化Cavggrade表: A 创建触发器实现功能: 1. 创建一个works数据库,其中包含员工表empoyee(eID, eName, salary),假设该表中有1000条员工数据,完成下列要求(总计20分,每题10分)。(1) 为了协助本题自动生成1000条员工数据,创建一个自动生成员工ID的用户自定义函数generateEID。其中员工ID要求是一个8位的数字,前四位表示插入员工数据的当前年份,后四位按照从0001到9999的顺序增长。例如2015年插入的第一条数据是20050001,所有1000条员工ID分别是201

11、50001-20151000。调用该函数实现自动插入1000条数据。(注意插入数据的时候员工姓名可以为任意值,工资是2000-5000之间的数字)2 create FUNCTION generateEID3 (4 emp_num int,5 year int6 )7 RETURNS emp Table (eID int primary key,eName char(20),salary int)8 AS9 BEGIN10 declare i int11 declare final_id int12 declare salary int13 declare name char(20)14 set

12、 i=1;15 set year=year*10000;16 while i <=emp_num17 begin18 set final_id =year+i19 set name = 'empoyee'+cast(i as varchar)20 set salary = 2000+i%6 *50021 insert into emp values(final_id,name,salary)22 set i=i+123 end24 return25 END使用该自定义函数的返回值创建一个empoyee的表;CREATE TABLE empoyee(eI

13、D int primary key,eName char(20),salary int)insert into empoyee  select * from dbo.generateEID(1000,2015)函数运行之后,empoyee表的数据变成了: (1) 该公司计划为员工按照一定的规则涨工资,请使用游标创建一个存储过程,执行该存储过程完成本次工资调整:工资增长规则如下:l 工资在3000元以下,每月涨300元;l 工资在3000-4000元之间,每月涨200元;l 工

14、资大于或者等于4000元,每月涨50元;create procedure upsalaryasdeclare eid nchar(10)declare salary intdeclare mycursor cursor for select eid from employeeopen mycursorfetch next from mycursor into eidwhile(FETCH_STATUS=0)beginselect salary=salary from employee where eid=eidif(salary<3000)beginupdate employeeset

15、salary=salary+300where eid=eidendif(salary>=3000 and salary<4000)beginupdate employeeset salary=salary+200where eid=eidendif(salary>=4000)beginupdate employeeset salary=salary+50where eid=eidendfetch next from mycursor into eidendclose mycursor二、实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)除了标题内容以外,该部分内容中

16、还可以写对于实验的一些感受,建议,意见等。3.自己的感受 数据库实验还是比较难做的实验,信息量和任务量都很大,在做这次实验之前,我开始看了一下实验的题目,对应着题目,我看了一遍课本,发现仅从课本上的知识是不能全部的做完这次实验,然后我通过查阅参考书,去做预习报告,我发现这次的题目相比于前几次是比较有挑战性的。比如说对于游标的使用、创建游标、执行带游标的存储过程等等,我在真正敲代码时,都遇到了相应的困难,带式通过咨询老师,查阅资料最终都得到了相应的解决。   批阅者: 批阅日期:实验成绩: 批注: 数据库原理实验报告实验名称学号姓名班级日期六ODBC/JDBC数据库编程201

17、3302536张林江100113032015-10-31实验六:ODBC/JDBC数据库编程1、实验目的1. 熟练掌握ODBC数据源的配置方法。2. 掌握ODBC编程技术。3. 掌握JDBC编程技术。(选做实验)2、实验内容1. ODBC配置以及程序调试:(50分)(1) 配置一个ODBC数据源,要求数据源名称:student,其中包含s(学生信息)表。1.点击开始菜单. -> 2打开<控制面板>. -à3在<调整计算机的设置>中,点击<系统和安全>. -à4. 点击<管理工具>. -à 5点击<数据源(ODBC)>.(2) 阅读并运行实验给出的例子程序,理解ODBC编程,要求简单写出自己对这段程序的理解或者流程图,并且请给出程序运行结果示例图。 程序基本思想:利用ODBC连接数据库Student进行查询。点击运行按钮,调CODBC_TESTDlg:OnButtonExcute()函数。 二、实验中出现的问题以及解决方案(对于

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论