您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 初中教育 > 实验八(上)--3110305129--潘聪
《数据库系统概论》实验报告实验题目:实验八(上)用户自定义函数和触发器日期2013.6.18班级计算机1105姓名潘聪3110305129实验环境:SQLServer2005实验目的:1、掌握SQLServer中用户自定义函数的使用方法。2、掌握SQLServer中触发器的使用方法。实验内容:1.创建一个返回标量值的用户定义函数RectangleArea:输入矩形的长和宽就能计算矩形的面积。自选2种实例调用该函数。createfunctionRectangleArea(@aint,@bint)returnsintasbeginreturn@a*@benddeclare@areaintexecute@area=RectangleArea3,5print('矩形面积是:')print@areadeclare@areaintexecute@area=RectangleArea7,8print('矩形面积是:')print@area2.创建一个用户自定义函数(内嵌表值函数),功能为产生某个系的学生选修信息,内容为学号,姓名,课程名,成绩。调用这个函数,显示信息系有选课学生的信息。createfunctionSearch(@sdeptchar(10))returnstableasreturn(selectsc.sno学号,student.sname姓名,course.cname课程名,sc.grade成绩,student.sdept系别fromsc,student,coursewherecourse.cno=sc.cnoandsc.sno=student.snoandsdept=@sdept)select*fromSearch('cs')3.创建一个作用在P表上的触发器P_checks,确保用户在插入或更新P表的WEIGHT值时,所提供的WEIGHT值介于20与40之间,否则给出错误提示并回滚此操作。请测试该触发器,测试方法自定。createtriggerP_checksonpforinsertasbegindeclare@weightintselect@weight=weightfrominsertedif@weight10or@weight20beginRAISERROR('weight必须在~20之间!',16,1)ROLLBACKTRANSACTIONendendinsertintop(pno,pname,color,weight)values('p7','刀片','红',40)insertintop(pno,pname,color,weight)values('p7','刀片','红',15)select*fromp4.创建一个作用在J表上的触发器J_Update,禁止同时修改项目的名称和所在城市,并进行相应的错误提示。请测试该触发器。测试方法自定。createtriggerJ_Updateonjforupdateasbegindeclare@jname1char(10),@city1char(10),@jname2char(10),@city2char(10)select@jname1=jname,@city1=cityfrominsertedselect@jname2=jname,@city2=cityfromdeletedif@jname1@jname2and@city1@city2beginRAISERROR('不能同时修改项目名称和项目地点!',16,1)ROLLBACKTRANSACTIONendendupdatejsetjname='建筑',city='上海'wherejno='j1'updatejsetjname='建筑'wherejno='j1'select*fromj5.学生表(Student)中存放学生的记录,学生选修表(SC)中存放学生的修课及成绩情况。创建一个触发器ScDel_Cascade,当删除Student中的数据时,数据表SC中有关刚刚删除学生的修课成绩信息也能被级联删除掉。测试该触发器,测试方法自定。createtriggerScDel_Cascadeonstudentfordeleteasbegindeclare@snochar(10)select@sno=snofromdeleteddeletefromscwheresno=@snoenddeletefromstudentwheresname='李勇'select*fromscselect*fromstudent附加题:创建一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。调用这个函数,生成相应的报表并给用户浏览。(多语句表值函数)显示形式如下:CnoCnameSC_numberMax_gradeMin_gradeAverage_grade-----------------------------------------------------------------1数据库3929292.02数学2858082.03信息系统1888888.04操作系统1NULLNULLNULL5数据结构1NULLNULLNULL6数据处理2555555.07PASCAL语言1NULLNULLNULL(7行受影响)select*fromsc,student,coursewheresc.cno=course.cnoandstudent.sno=sc.snocreatefunctionstudentgrade()returnstableasreturn(selectsc.cnoCno,course.cnameCname,count(sc.sno)SC_number,max(sc.grade)Max_grade,min(sc.grade)Min_grade,avg(sc.grade)Average_gradefromsc,student,coursewheresc.sno=student.snoandsc.cno=course.cnogroupbysc.cno,course.cname)select*fromstudentgrade()出现的问题:本实验中,主要学习和运用了自定义函数,经过这次实验对数据库的学习更加有浓厚的兴趣了,数据库编程也是非常有意思的一门学问,对sqlserver的理解又深入了一层~!解决方案(列出遇到的主要问题和解决办法,列出没有解决的问题):与任何函数一样,用户定义函数是可返回值的例程。根据所返回值的类型,每个用户定义函数可分成以下三个类别:1、返回可更新数据表的函数:如果用户定义函数包含单个Select语句且该语句可更新,则该函数返回的表格格式结果也可以更新。2、返回不可更新数据表的函数:如果用户定义函数包含不止一个Select语句,或包含一个不可更新的Select语句,则该函数返回的表格格式结果也不可更新。3、返回标量值的函数:用户定义函数可以返回标量值。
本文标题:实验八(上)--3110305129--潘聪
链接地址:https://www.777doc.com/doc-5367196 .html