



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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数据库,创建并执行如下的存储过程:(共计3
2、5 分)(1) 创建一个带参数的存储过程 jsearch 。该存储过程的作用是:当任意输入一个工程代号时,将返回供应该工程零件的供应商的名称(SNAME)和零件的名称 (PNAME)以及工程的名称 (JNAME)。执行 jsearch存储过程,查询“ J1”对应的信息。( 10 分)CREATEProcedurejsearch ( SPJ_JNOchar ( 10)AS1/18BEGINSELECTSNAME, PNAME, JNAMEFROMSPJ, S, P, JWHERESPJ_JNO= SPJ. JNO ANDSPJ. JNO = J. JNO ANDSPJ. PNO= P. PNOA
3、NDSPJ. SNO= S. SNOEND;输入下边命令,可得到结果jsearch'J1'( 2)使用 S 表,为其创建一个加密的存储过程jmsearch 。该存储过程的作用是:当执行该存储过程时,将返回北京供应商的所有信息。(10 分)CREATEPROCjmsearchWITH ENCRYPTIONASSELECTS. SNAME, S. SNO, S. STATUSFROMSWHERES. CITY = ' 北京 '2/18(3)使用系统存储过程sp_helptext查看 jsearch, jmsearch的文本信息。(5 分)EXECsp_helptex
4、tjsearchEXECsp_helptextjmsearch因为刚才已经加密,所以无法看见(4)执行 jmsearch存储过程,查看北京供应商的情况。(5 分)EXECjmsearch3/18( 5) 删除 jmsearch 存储过程。( 5 分)DROPPROCEDUREdbo . jmsearch3、 针对 Student 数据库,创建和执行如下的触发器:(共计40分)(1) 删除 SC表上的外键约束, 针对 SC表创建一个名为 insert_s 的 INSERT触发器。该触发器的功能: 当用户向 SC表中插入记录时, 如果插入的 cno 值不是 C表中 Cno的已有值, 则提示用户 “
5、不能插入记录这样的纪录”,否则提示 “记录插入成功” 。触发器创建成功之后,向SC表插入记录,验证触发器是否正常工作。(5 分)createtrigger insert_son SCfor insert asdeclarecnoointselectcnoofrom insertedif (notexists( select *from C where C. cno = cnoo)beginprint'不能插入记录这样的纪录 'endelseprint ' 记录插入成功 '4/18insertintoSC values ( '95002' ,
6、39;7', '100' )( 2) 为 S 表创建一个名为 dele_s1 的 DELETE触发器,该触发器的作用是禁止删除 S 表中的记录。触发器创建成功之后,删除 S 表中的记录,验证触发器是否正常工作。 (5 分)CREATEtriggerdele_s1ONSinsteadofdeleteas print' 不能删除 S表中记录 'deletefromSwhere S. sno = '95002'(3)为 S 表创建一个名为 dele_s2 的 DELETE触发器,该触发器的作用是删除S 表中的记录时删除 SC表中该学生的选课纪录
7、。触发器创建成功之后,删除S 表中的记录删除 S 表中的记录,验证触发器是否正常工作(SC 表中的数据被正常删除) 。(5 分)createtriggerdele_s2on S5/18fordeleteas deletefromSCwhere SC. sno in( selectsno fromdeleted )deletefrom s where s. sno='95001'当再次查询 SC表时可见 95001 已经别删除了(4)为 S 表创建一个名为 update_s 的 UPDATE触发器,该触发器的作用是禁止更新S 表中“ sdept ”字段的内容。触发器创建成功之后,
8、更新S 表中“ sdept ”字段的内容,验证触发器是否正常工作。(5 分)createtrigger update_son S for updateas ifupdate ( sdept )beginprint' 禁止更新 sdept 字段 'rollbacktran6/18endupdateSsetsdept= 'MA'where sno = '95002'(5)禁用 update_s触发器。禁用之后,更新S 表中的“ sdept ”字段的内容,验证触发器是否还继续正常工作。(5 分)altertable Sdisabletriggerupd
9、ate_supdateSsetsdept= 'MA'where sno = '95002'( 6) 删除 update_s 触发器。 (5 分 ) drop trigger update_s7/18(7)创建一个新的课程成绩统计表CAvgGrade(Cno, Snum, examSNum, avgGrade) ,分别表示课号,选该课程的学生人数,参加考试人数,该门课程的平均成绩。利用触发器实现如下的功能:当SC表中有记录插入、删除或者更新时,自动更新表CAvgGrade。注意 SC表中的 grade 为 NULL时表明该学生还未参加考试,计算平均成绩时不需要计算
10、该成绩,但是grade 为 0 即考试成绩为 0 时,需要计算该成绩。(10 分)createtableCAvgGrade(Cno char ( 10),Snum char ( 10),examSNumchar ( 10),avgGrade char ( 4);初始化 Cavggrade 表:8/18A 创建触发器实现功能:1.创建一个works 数据库,其中包含员工表empoyee(eID,eName, salary),假设该表中有 1000 条员工数据,完成下列要求(总计20 分,每题10 分)。9/18(1)为了协助本题自动生成1000 条员工数据, 创建一个自动生成员工ID 的用户自定
11、义函数generateEID 。其中员工ID 要求是一个8 位的数字,前四位表示插入员工数据的当前年份,后四位按照从0001 到 9999 的顺序增长。例如2015 年插入的第一条数据是 20050001,所有 1000 条员工 ID 分别是 20150001-20151000 。调用该函数实现自动插入 1000 条数据。(注意插入数据的时候员工姓名可以为任意值,工资是 2000-5000 之间的数字)2 createFUNCTIONgenerateEID3 (4 emp_numint ,5 year int6 )7 RETURNSemp Table( eID intprimarykey, e
12、Namechar ( 20), salaryint )8 AS9 BEGIN10declarei int11declare final_id int12declaresalary int13declarenamechar ( 20)14seti=1;15setyear=year* 10000;16while i <=emp_num17begin18setfinal_id=year+i19setname= 'empoyee' +cast ( i as varchar )20setsalary= 2000 +i%6 * 50021insertintoempvalues ( f
13、inal_id , name, salary)22seti=i+123end24return25END10/18使用该自定义函数的返回值创建一个empoyee 的表;CREATE TABLE empoyee( eIDintprimary key,eNamechar ( 20),salaryint)insertinto empoyeeselect*fromdbo. generateEID ( 1000, 2015)函数运行之后,empoyee 表的数据变成了:11/18(1) 该公司计划为员工按照一定的规则涨工资,请使用游标创建一个存储过程,执行该存储过程完成本次工资调整:工资增长规则如下:工资
14、在 3000 元以下,每月涨 300 元;工资在 3000-4000元之间,每月涨200元;工资大于或者等于4000 元,每月涨50元;createprocedure upsalaryasdeclareeid nchar ( 10)declaresalary intdeclaremycursor cursorfor select eid from employeeopen mycursorfetchnext from mycursorintoeidwhile ( FETCH_STATUS=0)beginselectsalary =salaryfromemployee where eid =ei
15、d12/18if ( salary <3000)beginupdate employeesetsalary =salary+300where eid =eidendif ( salary >=3000 and salary<4000)beginupdate employeesetsalary =salary+200where eid =eidendif ( salary >=4000)beginupdate employeesetsalary =salary+50where eid =eidendfetchnextfrom mycursorintoeidendclose
16、mycursor13/18二、实验中出现的问题以及解决方案( 对于未解决问题请将问题列出来)除了标题内容以外,该部分内容中还可以写对于实验的一些感受,建议,意见等。3. 自己的感受数据库实验还是比较难做的实验, 信息量和任务量都很大, 在做这次实验之前,我开始看了一下实验的题目,对应着题目,我看了一遍课本,发现仅从课本上的知识是不能全部的做完这次实验, 然后我通过查阅参考书, 去做预习报告, 我发现这次的题目相比于前几次是比较有挑战性的。 比如说对于游标的使用、创建游标、执行带游标的存储过程等等, 我在真正敲代码时,都遇到了相应的困难, 带式通过咨询老师, 查阅资料最终都得到了相应的解决。批阅
17、者:批阅日期:实验成绩:批注:数据库原理实验报告实验名称学号姓名班级日期六 ODBC/JDBC 数据库编 2013302536张林江10011303 2015-10-31程14/18实验六 :ODBC/JDBC数据库编程1、 实验目的1. 熟练掌握 ODBC数据源的配置方法。2. 掌握 ODBC编程技术。3. 掌握 JDBC编程技术。(选做实验)2、实验内容1. ODBC配置以及程序调试:( 50 分)(1) 配置一个 ODBC数据源, 要求数据源名称: student ,其中包含 s( 学生信息 ) 表。1.点击开始菜单. -> 2 打开 <控制面板 >. -3 在 <调整计算机的设置>中 ,点击 <系统和安全 >.-4. 点击 <管理工具 >. -5 点击 <数据源 (ODBC)>.15/18(2)阅读并运行实验给出的例子程序,理解ODBC编程,要求简单写出自己对这段程序的理解或者流程图,并且请给出程序运行结果示例图。程序基本思想:利用 ODBC连接数据库 Student 进行查询。点击运行按钮,调 CODBC_TESTDlg:OnButtonExcute() 函数。16/18二、实验中出现的问
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论