数据库实验报告56次.docx

上传人:b****7 文档编号:25100704 上传时间:2023-06-05 格式:DOCX 页数:22 大小:546.67KB
下载 相关 举报
数据库实验报告56次.docx_第1页
第1页 / 共22页
数据库实验报告56次.docx_第2页
第2页 / 共22页
数据库实验报告56次.docx_第3页
第3页 / 共22页
数据库实验报告56次.docx_第4页
第4页 / 共22页
数据库实验报告56次.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数据库实验报告56次.docx

《数据库实验报告56次.docx》由会员分享,可在线阅读,更多相关《数据库实验报告56次.docx(22页珍藏版)》请在冰豆网上搜索。

数据库实验报告56次.docx

数据库实验报告56次

《数据库原理》实验报告

实验名称

学号

姓名

班级

日期

五触发器、存储过程和函数

2013302536

张林江

10011303

2015-10-31

实验五:

触发器、存储过程和函数

1、实验目的

1.掌握系统存储过程的使用用法。

2.掌握用户自定义的存储过程的创建和执行方法。

3.掌握触发器的创建和执行方法。

4.掌握用户自定义函数的创建和执行方法。

2、实验内容

1、使用系统存储过程(sp_rename)将视图“V_SPJ”更名为“V_SPJ_三建”。

(5分)

sp_rename'V_SPJ','VSPJ_三建'

2、针对SPJ数据库,创建并执行如下的存储过程:

(共计35分)

(1)创建一个带参数的存储过程—jsearch。

该存储过程的作用是:

当任意输入一个工程代号时,将返回供应该工程零件的供应商的名称(SNAME)和零件的名称(PNAME)以及工程的名称(JNAME)。

执行jsearch存储过程,查询“J1”对应的信息。

(10分)

CREATEProcedurejsearch(@SPJ_JNOchar(10))

AS

BEGIN

SELECTSNAME,PNAME,JNAME

FROMSPJ,S,P,J

WHERE@SPJ_JNO=SPJ.JNOAND

SPJ.JNO=J.JNOAND

SPJ.PNO=P.PNOAND

SPJ.SNO=S.SNO

END;

输入下边命令,可得到结果

jsearch'J1'

(2)使用S表,为其创建一个加密的存储过程—jmsearch。

该存储过程的作用是:

当执行该存储过程时,将返回北京供应商的所有信息。

(10分)

CREATEPROCjmsearch

WITHENCRYPTION

AS

SELECTS.SNAME,S.SNO,S.STATUS

FROMS

WHERES.CITY='北京'

(3)使用系统存储过程sp_helptext查看jsearch,jmsearch的文本信息。

(5分)

EXECsp_helptextjsearch

EXECsp_helptextjmsearch

因为刚才已经加密,所以无法看见

(4)执行jmsearch存储过程,查看北京供应商的情况。

(5分)

EXECjmsearch

(5)删除jmsearch存储过程。

(5分)

DROPPROCEDURE[dbo].[jmsearch]

3、针对Student数据库,创建和执行如下的触发器:

(共计40分)

(1)删除SC表上的外键约束,针对SC表创建一个名为insert_s的INSERT触发器。

该触发器的功能:

当用户向SC表中插入记录时,如果插入的cno值不是C表中Cno的已有值,则提示用户“不能插入记录这样的纪录”,否则提示“记录插入成功”。

触发器创建成功之后,向SC表插入记录,验证触发器是否正常工作。

(5分)

createtriggerinsert_s

onSC

forinsertas

declare@cnooint

select@cnoofrominserted

if(notexists(select*fromCwhereC.cno=@cnoo))

begin

print'不能插入记录这样的纪录'

end

elseprint'记录插入成功'

insertintoSCvalues('95002','7','100')

(2)为S表创建一个名为dele_s1的DELETE触发器,该触发器的作用是禁止删除S表中的记录。

触发器创建成功之后,删除S表中的记录,验证触发器是否正常工作。

(5分)

CREATEtriggerdele_s1ONS

insteadofdelete

asprint'不能删除S表中记录'

delete

fromS

whereS.sno='95002'

(3)为S表创建一个名为dele_s2的DELETE触发器,该触发器的作用是删除S表中的记录时删除SC表中该学生的选课纪录。

触发器创建成功之后,删除S表中的记录删除S表中的记录,验证触发器是否正常工作(SC表中的数据被正常删除)。

(5分)

createtriggerdele_s2

onS

fordelete

asdelete

fromSC

whereSC.snoin(selectsnofromdeleted)

deletefromswheres.sno='95001'

当再次查询SC表时可见95001已经别删除了

(4)为S表创建一个名为update_s的UPDATE触发器,该触发器的作用是禁止更新S表中“sdept”字段的内容。

触发器创建成功之后,更新S表中“sdept”字段的内容,验证触发器是否正常工作。

(5分)

createtriggerupdate_sonSforupdate

asifupdate(sdept)

begin

print'禁止更新sdept字段'

rollbacktran

end

updateS

setsdept='MA'

wheresno='95002'

(5)禁用update_s触发器。

禁用之后,更新S表中的“sdept”字段的内容,验证触发器是否还继续正常工作。

(5分)

altertableS

disabletriggerupdate_s

updateS

setsdept='MA'

wheresno='95002'

(6)删除update_s触发器。

(5分)

droptriggerupdate_s

(7)创建一个新的课程成绩统计表CAvgGrade(Cno,Snum,examSNum,avgGrade),分别表示课号,选该课程的学生人数,参加考试人数,该门课程的平均成绩。

利用触发器实现如下的功能:

当SC表中有记录插入、删除或者更新时,自动更新表CAvgGrade。

注意SC表中的grade为NULL时表明该学生还未参加考试,计算平均成绩时不需要计算该成绩,但是grade为0即考试成绩为0时,需要计算该成绩。

(10分)

createtableCAvgGrade

Cnochar(10),

Snumchar(10),

examSNumchar(10),

avgGradechar(4)

);

初始化Cavggrade表:

A.创建触发器实现功能:

1.创建一个works数据库,其中包含员工表empoyee(eID,eName,salary),假设该表中有1000条员工数据,完成下列要求(总计20分,每题10分)。

(1)为了协助本题自动生成1000条员工数据,创建一个自动生成员工ID的用户自定义函数generateEID。

其中员工ID要求是一个8位的数字,前四位表示插入员工数据的当前年份,后四位按照从0001到9999的顺序增长。

例如2015年插入的第一条数据是20050001,所有1000条员工ID分别是20150001-20151000。

调用该函数实现自动插入1000条数据。

(注意插入数据的时候员工姓名可以为任意值,工资是2000-5000之间的数字)

2.createFUNCTIONgenerateEID

3.(

4.@emp_numint,

5.@yearint

6.)

7.RETURNS@empTable(eIDintprimarykey,eNamechar(20),salaryint)

8.AS

9.BEGIN

10.declare@iint

11.declare@final_idint

12.declare@salaryint

13.declare@namechar(20)

14.set@i=1;

15.set@year=@year*10000;

16.while@i<=@emp_num

17.begin

18.set@final_id=@year+@i

19.set@name='empoyee'+cast(@iasvarchar)

20.set@salary=2000+@i%6*500

21.insertinto@empvalues(@final_id,@name,@salary)

22.set@i=@i+1

23.end

24.return

25.END

使用该自定义函数的返回值创建一个empoyee的表;

CREATE TABLE empoyee

(eID int primary key,

eName char(20),

salary int)

insert into empoyee  

select * 

from dbo.generateEID(1000,2015)

函数运行之后,empoyee表的数据变成了:

(1)该公司计划为员工按照一定的规则涨工资,请使用游标创建一个存储过程,执行该存储过程完成本次工资调整:

工资增长规则如下:

●工资在3000元以下,每月涨300元;

●工资在3000-4000元之间,每月涨200元;

●工资大于或者等于4000元,每月涨50元;

createprocedureupsalary

as

declare@eidnchar(10)

declare@salaryint

declaremycursorcursorforselecteidfromemployee

openmycursor

fetchnextfrommycursorinto@eid

while(@@FETCH_STATUS=0)

begin

select@salary=salaryfromemployeewhereeid=@eid

if(@salary<3000)

begin

updateemployee

setsalary=@salary+300

whereeid=@eid

end

if(@salary>=3000and@salary<4000)

begin

updateemployee

setsalary=@salary+200

whereeid=@eid

end

if(@salary>=4000)

begin

updateemployee

setsalary=@salary+50

whereeid=@eid

end

fetchnextfrommycursorinto@eid

end

closemycursor

二、实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)

除了标题内容以外,该部分内容中还可以写对于实验的一些感受,建议,意见等。

3.自己的感受

数据库实验还是比较难做的实验,信息量和任务量都很大,在做这次实验之前,我开始看了一下实验的题目,对应着题目,我看了一遍课本,发现仅从课本上的知识是不能全部的做完这次实验,然后我通过查阅参考书,去做预习报告,我发现这次的题目相比于前几次是比较有挑战性的。

比如说对于游标的使用、创建游标、执行带游标的存储过程等等,我在真正敲代码时,都遇到了相应的困难,带式通过咨询老师,查阅资料最终都得到了相应的解决。

  

批阅者:

批阅日期:

实验成绩:

批注:

 

《数据库原理》实验报告

实验名称

学号

姓名

班级

日期

六ODBC/JDBC数据库编程

2013302536

张林江

10011303

2015-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()函数。

二、实验中出现的问题以及解决方案(对于未解决问题请将问题列出来)

除了标题内容以外,该部分内容中还可以写对于实验的一些感受,建议,意见等。

3.自己的感受

了解了ODBC的编程奥妙,触发器定义对相应数据库带来的便利等等。

通过这次实验,我了解到的学习数据库给我带来的乐趣和编程实现的小小成就感,我感觉自己了解的知识还是很少,应该虚心向老师请教,向同学们学习,多多交流,多看书,更多的锻炼编程,争取有更多的进步。

 

这次实验整体感觉要难一些,主要是很多东西在书上找不到答案,后来通过与同学讨论在网上查询资料得以解决。

   

批阅者:

批阅日期:

实验成绩:

批注:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1