资源描述:
《数据库系统教程 教学课件 作者 何玉洁 李宝安 第19章 存储过程和游标.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、数据库系统教程第19章存储过程和游标1第19章存储过程和游标19.1存储过程19.2游标*219.1存储过程19.1.1存储过程概念19.1.2创建和执行存储过程19.1.3查看和修改存储过程*319.1.1存储过程概念用T-SQL编写代码时,可用两种方法存储和执行代码:在客户端存储代码,并创建向SQLServer发送SQL命令(或SQL语句)并处理返回结果的应用程序将SQL语句存储在数据库服务器端数据库中,由用户调用执行这些存储在数据库服务器端的SQL语句就是存储过程。*4存储过程功能可以接受输入参数并以输出参数的形式将多个值返回至
2、调用过程或批处理。可以包含执行数据库操作(包括调用其它过程)的语句。可以向调用者返回状态值,以表明成功或失败。*5存储过程好处允许模块化程序设计改善性能减少网络流量可作为安全机制使用*619.1.2创建和执行存储过程CREATEPROC[EDURE]存储过程名[{@参数名数据类型}[=default]--默认值[OUTPUT]--是输出参数][,...n]ASSQL语句[...n]*7执行存储过程的SQL语句[EXEC[UTE]]存储过程名[实参[,OUTPUT][,…n]]*8例1.查询计算机系学生的考试情况,列出学生的姓名、课程名
3、和考试成绩。*9执行此存储过程:EXECstudent_grade1CREATEPROCEDUREstudent_grade1ASSELECTSname,Cname,GradeFROMStudentsINNERJOINSCONs.Sno=SC.SnoINNERJOINCoursecONc.Cno=sc.CnoWHERESdept='计算机系'例2.带有输入参数的存储过程:查询某个指定系学生的考试情况,列出学生的姓名、所在系、课程名和考试成绩。*10执行:查询信息管理系学生的修课情况。EXECstudent_grade2'信息管理系'C
4、REATEPROCEDUREstudent_grade2@deptchar(20)ASSELECTSname,Sdept,Cname,GradeFROMStudentsINNERJOINSCONs.Sno=SC.SnoINNERJOINCoursecONc.Cno=SC.CnoWHERESdept=@dept例3.带有多个输入参数并有默认值的存储过程:查询某个学生某门课程的考试成绩,若没有指定课程,则默认课程为VB。*11CREATEPROCEDUREstudent_grade3@snamechar(10),@cnamechar(20
5、)='VB'ASSELECTSname,Cname,GradeFROMStudentsINNERJOINSCONs.Sno=SC.snoINNERJOINCoursecONc.Cno=SC.CnoWHEREsname=@snameANDcname=@cname参数传递方式(1)按参数位置传递值执行存储过程的EXEC语句中的实参排列顺序必须与定义存储过程时定义的参数的顺序一致。(2)按参数名传递值执行存储过程的EXEC语句中要指明定义存储过程时指定的参数的名字以及此参数的值,而不关心参数的定义顺序。*12示例按参数位置传递EXECstu
6、dent_grade3'吴宾','高等数学'按参数名传递EXECStudent_grade3@sname='吴宾',@cname='高等数学’*13关于默认值如果在定义存储过程时为参数指定了默认值,则在执行存储过程时可以不为有默认值的参数提供值。例如:EXECstudent_grade3'吴宾'相当于执行:EXECstudent_grade3'吴宾','VB'*14例4.带有输出参数的存储过程。计算全体学生人数,并将计算结果作为输出参数返回给调用者。*15执行此存储过程:Declare@resint--变量声明语句ExecuteCou
7、nt_Total@resoutputPrint@res--输出语句CreateProcedureCount_Total@totalintoutputAsSelect@total=COUNT(*)FROMStudent局部变量例5.带输入参数和输出参数的存储过程。统计指定课程(课程名)的平均成绩,并将统计的结果作为输出参数。CREATEPROCAvgGrade@cnchar(20),@avg_gradeintoutputASSELECT@avg_grade=AVG(Grade)FROMSCJOINCourseCONC.Cno=SC.Cn
8、oWHERECname=@cn执行此存储过程,查询VB课程的平均成绩。DECLARE@Avg_GradeintEXECAvgGrade'VB',@Avg_GradeoutputPrint@Avg_Grade示例例6.删除