存储过程参数案例.ppt_第1页
存储过程参数案例.ppt_第2页
存储过程参数案例.ppt_第3页
存储过程参数案例.ppt_第4页
存储过程参数案例.ppt_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、存储过程参数,使用输入参数执行存储过程,存储过程(procedure)类似于C语言中的函数 用来执行管理任务或应用复杂的业务规则 存储过程可以带参数,也可以返回结果 参数分为输入参数、输出参数 输入参数允许有默认值,创建不带参数的存储过程,问题:请创建存储过程,查看本次考试平均分以及未通过考试的学员名单,创建不带参数的存储过程,CREATE PROCEDURE proc_stu AS DECLARE writtenAvg float,labAvg float /*笔试平均分和机试平均分变量 */ SELECT writtenAvg=AVG(writtenExam), labAvg=AVG(la

2、bExam) FROM stuMarks print 笔试平均分:+convert(varchar(5),writtenAvg) print 机试平均分:+convert(varchar(5),labAvg) IF (writtenAvg70 AND labAvg70) print本班考试成绩:优秀 /*显示考试成绩的等级*/ ELSE print本班考试成绩:较差 print- print参加本次考试没有通过的学员: SELECT stuName,stuInfo.stuNo,writtenExam,LabExam From stuInfo /*查询没有通过考试的学员*/ INNER JOIN

3、 stuMarks ON stuInfo.stuNo=stuMarks.stuNo WHERE writtenExam60 OR LabExam60,创建带参数的存储过程,存储过程的参数分两种: 输入参数 输出参数 输入参数:用于向存储过程传入值,类似C语言的按值传递; 输出参数:用于在调用存储过程后,返回结果,类似C语言的按引用传递;,带输入参数的存储过程,通过参数名传递值 用parameter=value格式在EXEC语句中指定参数称为通过参数名传递值在通过参数名传递值时,参数可以以任何顺序指定,可以忽略允许空值和有默认的参数存在时(相当于覆盖了).,带输入参数的存储过程,在以下情况下使用

4、存储过程中定义的默认参数值: 在执行存储过程时没有给参数指定值 指定default关键字作为参数的值,带输入参数的存储过程,问题: 修改上例:由于每次考试的难易程度不一样,每次 笔试和机试的及格线可能随时变化(不再是60分),这导致考试的评判结果也相应变化。 分析: 在述存储过程添加2个输入参数: writtenPass 笔试及格线 labPass 机试及格线,带输入参数的存储过程,CREATE PROCEDURE proc_stu1 writtenPass int, /*输入参数:笔试及格线*/ labPass int /*输入参数:机试及格线*/ AS print - print 参加本次

5、考试没有通过的学员: SELECT stuName, stuInfo.stuNo, writtenExam, labExam From stuInfo /*查询没有通过考试的学员*/ INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo WHERE writtenExamwrittenPass OR labExamlabPass,带输入参数的存储过程,调用带参数的存储过程 假定本次考试机试偏难,机试的及格线定为55分,笔试及格线定为60分 调用过程 EXEC proc_stu1 60,55 -或这样调用: EXEC proc_stu1 labP

6、ass=55,writtenPass=60,输入参数的默认值,带参数的存储过程确实比较方便,调用者可根据试卷的难易度,随时修改每次考试的及格线 问题: 如果试卷的难易程度合适,则调用者还是必须如此调用: EXEC proc_stu 60,60,比较麻烦,这样调用就比较合理: EXEC proc_stu1 55笔试及格线55分,机试及格线默认为60分 EXEC proc_stu1笔试和机试及格线都默认为标准的60分,输入参数的默认值,CREATE PROCEDURE proc_stu2 writtenPass int=60, /*笔试及格线:默认为60分*/ labPass int=60 /*机

7、试及格线:默认为60分*/ AS print - print 参加本次考试没有通过的学员: SELECT stuName,stuInfo.stuNo,writtenExam,LabExam FROM stuInfo INNER JOIN stuMarks ON /*查询没有通过考试的学员*/ stuInfo.stuNo=stuMarks.stuNo WHERE writtenExamwrittenPass OR LabExamlabPass,输入参数的默认值,调用带参数默认值的存储过程 EXEC proc_stu2 -都采用默认值 EXEC proc_stu2 64 -机试采用默认值 EXEC

8、 proc_stu2 60,55 -都不采用默认值 -错误的调用方式:希望笔试采用默认值,机试及格线55分 EXEC proc_stu2 ,55,输入参数的默认值,-正确的调用方式: EXEC proc_stu2 labPass=55,使用输入参数执行存储过程,通过定位传递参数 只进行值的传递(没有引用传递参数)称为通过定位传递参数当只指定一个值时,列出参数值在CREATE PROCEDURE 语句中定义的顺序在通过定位传递参数时,可以忽略默认存在的参数,但是不可破坏次序,带输出参数的存储过程,如果希望调用存储过程后,返回一个或多个值,这时就需要使用输出(OUTPUT)参数了 问题: 修改上例

9、,返回未通过考试的学员人数。,带输出参数的存储过程,CREATE PROCEDURE proc_stu notpassSum int OUTPUT, writtenPass int=60, labPass int=60 AS SELECT stuName,stuInfo.stuNo,writtenExam, labExam FROM stuInfo INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo WHERE writtenExamwrittenPass OR labExamlabPass SELECT notpassSum=COUNT(stuNo) FROM st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论