实验七创建和操作数据库对象Word文档下载推荐.docx
- 文档编号:15797916
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:19
- 大小:819.73KB
实验七创建和操作数据库对象Word文档下载推荐.docx
《实验七创建和操作数据库对象Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验七创建和操作数据库对象Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
createprocgrad
(@max_gradeintoutput,
@min_gradeintoutput)
as
select@max_grade=MAX(grade)
fromgrades
select@min_grade=MIN(grade)
return
go
declare@max_gradeint,@min_gradeint
execgrad@max_gradeoutput,@min_gradeoutput
select@max_grade,@min_grade
2.有输入输出参数(执行存储过程时按顺序填充参数)
CREATEPROCmy_procage@namenchar(20),@ageintOUTPUT
AS
ifnotexists(SELECT*FROMstudentsWHEREstud_name=@name)
return-101
SELECT@age=age
FROMstudents
WHEREstud_name=@name
GO
DECLARE@stud_ageint,@statusint
EXEC@status=my_procage'
葛文卿'
@stud_ageOUTPUT
if@status=-101
print'
nothatperson!
'
else
thestudentageis:
+convert(varchar(10),@stud_age)
withcheckoption
CREATEVIEWcustview
SELECT*FROMcustomersWHEREdiscnt<
12.0
SELECT*FROMcustview
updatecustview
setdiscnt=13.0
wherecid='
c001'
select*fromcustomers
实验7-1存储过程
1、使用不带参数的存储过程
(1)创建一个存储过程my_proc,查询“学生表”中所有计算机系女生的学号、姓名、性别、年龄和所在院系
DECLARE@stud_ageint,@statusintmy_proc
SELECTstud_id,stud_name,gender,age,school
WHEREgender='
女'
ANDschool='
计算机'
Return
(2)执行存储过程
EXECmy_proc
(3)修改存储过程,使其能够查询计算机系女生的所有基本信息
ALTERPROCmy_proc
SELECT*
2、带输入参数的存储过程
(1)创建一个存储过程my_procsex,使其能够查询“学生表”中男学生或女学生的学号、姓名、性别、年龄和所在院系
CREATEPROCmy_procsex@sexnchar(20)
WHEREgender=@sex
EXECmy_procsex@sex='
3、带输入/输出参数的存储过程
(1)创建一个存储过程my_procage,使其能够根据学生姓名,查询学生年龄。
(考虑当学生不存在时给出提示信息)
EXEC@status=my_procage@name='
@age=@stud_ageOUTPUT
4、返回状态值的存储过程
(1)创建一个存储过程my_procstatus,使其能够根据学生姓名,查询学生的选课信息。
(如果没有输入学生姓名,返回状态码55;
如果输入的学生姓名不存在,则返回状态码-155)
(使用参数的默认值)
CREATEPROCmy_procstatus@namenchar(20)='
if(@name='
)
return55
elseifnotexists(SELECT*FROMstudentsWHEREstud_name=@name)
return-155
SELECTg.stud_id,cid,grade,credit
FROMgradesg,studentss
WHEREg.stud_id=s.stud_idANDstud_name=@name
(2)执行存储过程:
接收存储过程返回的状态码,如果返回的状态码为55则输出提示信息“没有输入名字!
!
”;
如果返回的状态码为-155,则输出“没找到!
”。
DECLARE@statusint
EXEC@status=my_procstatus
if@status=55
没有输入名字!
!
elseif@status=-155
PRINT'
没找到!
EXEC@status=my_procstatus@name='
XXX'
(3)删除存储过程
DROPPROCmy_procstatus
5、在存储过程中使用临时表,不指定题目,请理解全局临时表与局部临时表的区别
createproctemp_course
SELECT*INTO#coursesFROMcourses
SELECT*INTO##coursesFROMcourses
EXECPROCtemp_course
SELECT*FROM#courses
(1)局部临时表:
以#开头,只对当前连接有效,当前连接断开时自动删除。
(2)全局临时表:
以##开头,对其他连接也有效,在当前连接和其他访问它的连接断开时自动删除。
实验7-2视图的创建与使用
1.创建一个名为stud_view1的视图,从“学生管理数据库”的学生表中查询出性别为男的所有学生的学号,姓名,性别,班级,家庭住址,入学时间和出生年月。
CREATEVIEWstud_view1AS
SELECTstud_id,stud_name,gender,class,enroll_date,2014-ageASbirth_day
男'
SELECT*FROMstud_view1
2.创建一个名为stud_view2的视图,查询出选修了《高等数学》的所有同学的选课信息,包括学号,姓名,成绩。
CREATEVIEWstud_view2AS
SELECTs.stud_id,s.stud_name,g.grade
FROMstudentss,gradesg,coursesc
WHEREs.stud_id=g.stud_idANDg.cid=c.cid
ANDame='
高等数学'
SELECT*FROMstud_view2
3.从视图stud_view1中查询出软件2班肖一竹的资料。
SELECT*FROMstud_view1
WHEREclass='
软件班'
ANDstud_name='
肖一竹'
4.向视图stud_view2中插入一行数据:
学号为9940210,姓名为钱丽,成绩为71,结果是什么?
INSERTINTOstud_view2
VALUES(9940210,'
钱丽'
71)
5.修改视图stud_view1,将20023001号同学的性别更改为女。
然后再次查询学生表和视图stud_view1,看结果有何改变,为什么?
UPDATEstud_view1
SETgender='
WHEREstud_id=20023001
SELECT*FROMstudents
原因:
上面把学号为20023001的同学的性别改为了女,学生表被更新。
因为视图stud_view1里面存取的是性别为男的学生的信息,当把学号为20023001的同学的性别改为女后,在视图中就找不到他了。
6.完成教科书457页如下习题:
[7.5]a:
答:
三条SQL语句都不合法,因为他们创建视图的语句from后面都跟了多张表,所以创建的视图不是可更新视图。
[7.5]b:
CREATEVIEWagentview
SELECT*FROMagentWHERE[percent]>
=0AND[percent]<
=10
[7.9]:
违反了规则5,不能够含有salary1+salary2这种列,这样的话,如果我们对视图进行更新以后就无法使原始表进行同步的更新,因为知道salary1+salary2的值,无法知道salary1与salary2人别的值。
[7.12]:
drop
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 创建 操作 数据库 对象
